今天處理網頁權限問題時,發現桌面應用程序控制的權限和網頁權限對不上
分析之后發現兩個項目不是取一個數據庫的數據,它們只是通過一張用戶權限表來控制權限
最終對比發現兩張表中權限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