【代码分享-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,如需转载请自行联系原作者








相关文章
|
7天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
27天前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
22天前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
22天前
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
|
29天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
30天前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
30天前
|
SQL Oracle 关系型数据库
SQL如何添加字段记录:详细步骤与技巧
在数据库管理中,经常需要向已有的表中添加新的字段(列)或向表中插入新的记录
|
30天前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
28天前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
下一篇
无影云桌面