今天处理网页权限问题时,发现桌面应用程序控制的权限和网页权限对不上
分析之后发现两个项目不是取一个数据库的数据,它们只是通过一张用户权限表来控制权限
最终对比发现两张表中权限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