设为首页 收藏本站
查看: 812|回复: 0

[经验分享] Sql Server中如何删除字段的自增标识

[复制链接]

尚未签到

发表于 2017-12-14 07:45:05 | 显示全部楼层 |阅读模式
  今天处理网页权限问题时,发现桌面应用程序控制的权限和网页权限对不上
  分析之后发现两个项目不是取一个数据库的数据,它们只是通过一张用户权限表来控制权限
  最终对比发现两张表中权限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   >  
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>=>

  

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

  

--修改增加的列名为自增列的列明  
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>  
END
  
GO
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423886-1-1.html 上篇帖子: 在SQL Server中实现关系模型的阶梯到级别3的t 下篇帖子: SQL Server 查询性能优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表