Sql Server中如何删除字段的自增标识

今天处理网页权限问题时,发现桌面应用程序控制的权限和网页权限对不上
分析之后发现两个项目不是取一个数据库的数据,它们只是通过一张用户权限表来控制权限
最终对比发现两张表中权限id不一致,查看项目发现他们都是取id来控制(id都是自增,醉了,为啥不加标识列,用标识列来控制),所以导致权限控制出错
为了解决这个问题,最后的方案是————以桌面应用程序对应的数据库为基础数据库,在网页对应的数据库中去同步这个数据
因为id都为自增 所以要去掉网页对应的数据库的这张表id的自增
那么问题来了,如何用sql语句去掉表中字段自增标识
语句如下:

--创建一个普通列
ALTER TABLE dbo.表名 ADD 列名 INT 
GO
--将自增列数据插入新建列名中
UPDATE dbo.表名 SET 列名 = 自增列名;
GO
--删除自增列
ALTER TABLE dbo.表名 DROP COLUMN 自增列名 
GO
--修改增加的列名为自增列的列明
EXEC sys.sp_rename @objname = N'表名.列名', 
@newname = '自增列名', 
@objtype = 'COLUMN'

 

运行时发现这张表有外键
那么问题来了,一张表有外键或者主键时,如何用sql语句去掉表中字段自增标识
语句如下(多个主键,多个外键不行):

--创建一个普通列
IF NOT  EXISTS ( SELECT  * FROM    sys.columns WHERE   object_id = OBJECT_ID('Table_1') AND name = 'id1') 
BEGIN
ALTER TABLE dbo.Table_1 ADD    id1 INT 
END 
GO 

IF EXISTS (SELECT COLUMNPROPERTY( OBJECT_ID('Table_1'),'id','IsIdentity'))
BEGIN
DECLARE @name NVARCHAR(100)--外键名
DECLARE @id NVARCHAR(100)--主键id
DECLARE @name1 NVARCHAR(100)--主键名
DECLARE @sql VARCHAR(MAX)

--删除外键
IF EXISTS ( SELECT name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id where f.parent_object_id=object_id('Table_1'))
BEGIN
SET @name= (SELECT name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id where f.parent_object_id=object_id('Table_1'))
SET @sql='alter table Table_1 drop constraint '+ @name 
EXEC(@sql)
END 

--删除主键
IF EXISTS ( SELECT CONSTRAINT_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='Table_1')
BEGIN
SELECT @name1=CONSTRAINT_NAME,@id=COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='Table_1'
END 
SET @sql='Alter table  Table_1  Drop Constraint '+ @name1 
PRINT @sql
EXEC(@sql)

--将自增列数据插入新建列名中
UPDATE dbo.Table_1 SET id1 = id

--删除自增列
ALTER TABLE dbo.Table_1 DROP COLUMN ID 

--修改增加的列名为自增列的列明
EXEC sys.sp_rename @objname = N'Table_1.id1', 
    @newname = 'id', 
    @objtype = 'COLUMN' 

--重新增加主键
IF ISNULL(@name1,'')<>''
BEGIN
SET @sql='ALTER table Table_1 add CONSTRAINT '+ @name+' Primary  Key('+@id+') '
EXEC(@sql)
END 

--重新增加外键
IF ISNULL(@name,'')<>''
BEGIN
SET @sql='ALTER table Table_1 add CONSTRAINT '+ @name+' foreign key(id) references Table_2('+@id+') '
EXEC(@sql)
END

END 
GO 

--是否存在一个普通列
IF EXISTS ( SELECT  * FROM    sys.columns WHERE   object_id = OBJECT_ID('Table_1') AND name = 'id1') 
BEGIN
ALTER TABLE dbo.Table_1 DROP COLUMN id1  
END 
GO 

 

posted @ 2017-06-13 16:35  笑叹、  阅读(11173)  评论(0编辑  收藏  举报