博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【代码分享-SQL】(已有数据)表的[ID]字段变更为‘自增长’
阅读量:5948 次
发布时间:2019-06-19

本文共 1622 字,大约阅读时间需要 5 分钟。

表上创建好了PK,却发现了更大的麻烦:忘记将[ID] 字段设置成IDENTITY了:(

那可是几百张表哪!那就编写SQL脚本来搞定吧。

 

可是,这事没有想象中那么容易:ALTER TABLE不支持将某字段变更为IDENTITY (注:MS SQL Mobile是支持此语法的)

而且,若该字段上有PK、Index、Constrains等,必须先删除才能DROP COLUMN.

 

注:

1)下面的代码只处理了单个表的。整个DB中所有表,或者选择一批表进行处理,是件很容易的事,读者自己搞定吧。

2)这段代码只是示例,作了很多简化与假定:

- 简化:不判断是否存在特定名称的PK;

- 假定:[ID]字段上没有其它约束

- 假定:目标表的PK固定为PK_#Table#,目标字段为[ID]

- 假定:之前的ID数据没有用(否则应该使用Move—>Rebuild-->MoveBack的方式)

 

----献上代码--------------------------------------

 
  1. set ANSI_NULLS ON 
  2. set QUOTED_IDENTIFIER ON 
  3. go 
  4.  
  5. -- ============================================= 
  6. -- Author:      Yew 
  7. -- Create date: 2011-06-12 
  8. -- Description: 为某表设置IDENTITY(on ID) 
  9. -- ============================================= 
  10. ALTER PROCEDURE [TOOL].[sp_Table_SetIdentity] 
  11.      @Table varchar(100) 
  12.     ,@Schema    varchar(100) 
  13. AS 
  14. BEGIN 
  15.     DECLARE @vSQL nvarchar(max
  16.  
  17.     -- drop PK on [ID] 
  18.     SET @vSQL = N' 
  19. ALTER TABLE  #Schema#.#Table
  20.     DROP CONSTRAINT PK_#Table#; 
  21.     SET @vSQL = Replace(@vSQL, '#Table#', @Table
  22.     SET @vSQL = Replace(@vSQL, '#Schema#', @Schema
  23. print @vSql 
  24.     EXEC (@vSql) 
  25.  
  26.     -- rebuild IDENTITY column 
  27.     SET @vSQL = N' 
  28. ALTER TABLE  #Schema#.#Table
  29.     DROP COLUMN [ID]; 
  30.  
  31. ALTER TABLE  #Schema#.#Table
  32.     ADD [ID] int IDENTITY(1, 1) NOT NULL
  33.  
  34. ALTER TABLE [#Schema#].[#Table#] ADD  CONSTRAINT [PK_#Table#] PRIMARY KEY CLUSTERED  
  35.     [ID] ASC 
  36. )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = ON, ONLINE = OFFON [PRIMARY]; 
  37.     SET @vSQL = Replace(@vSQL, '#Table#', @Table
  38.     SET @vSQL = Replace(@vSQL, '#Schema#', @Schema
  39. print @vSql 
  40.     EXEC (@vSql) 
  41. END 

----献上代码--------------------------------------

===== by 鬼谷子@魔教========================= 

本文转自DavyYew 51CTO博客,原文链接: http://blog.51cto.com/davyyew/586939,如需转载请自行联系原作者

你可能感兴趣的文章
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>