【代码分享-SQL】(已有数据)表的[ID]字段变更为‘自增长’

简介:

表上创建好了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 鬼谷子@魔教========================= Yew Blog签名






















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








相关文章
|
1月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
451 43
|
1月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
145 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
2月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
2月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
2月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
620 0
|
11月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
11月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
11月前
|
SQL
使用SQL进行集合查询和数据维护
使用SQL进行集合查询和数据维护
108 0
|
SQL 存储 分布式计算

热门文章

最新文章