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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM