【代码分享-SQL】(已有数据)表的[ID]字段变更为‘自增长’
2011-06-13 10:34
204 查看
表上创建好了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的方式)
----献上代码--------------------------------------
- set ANSI_NULLS ON
- set QUOTED_IDENTIFIER ON
- go
- -- =============================================
- -- Author: Yew
- -- Create date: 2011-06-12
- -- Description: 为某表设置IDENTITY(on ID)
- -- =============================================
- ALTER PROCEDURE [TOOL].[sp_Table_SetIdentity]
- @Table varchar(100)
- ,@Schema varchar(100)
- AS
- BEGIN
- DECLARE @vSQL nvarchar(max)
- -- drop PK on [ID]
- SET @vSQL = N'
- ALTER TABLE #Schema#.#Table#
- DROP CONSTRAINT PK_#Table#;
- '
- SET @vSQL = Replace(@vSQL, '#Table#', @Table)
- SET @vSQL = Replace(@vSQL, '#Schema#', @Schema)
- print @vSql
- EXEC (@vSql)
- -- rebuild IDENTITY column
- SET @vSQL = N'
- ALTER TABLE #Schema#.#Table#
- DROP COLUMN [ID];
- ALTER TABLE #Schema#.#Table#
- ADD [ID] int IDENTITY(1, 1) NOT NULL;
- ALTER TABLE [#Schema#].[#Table#] ADD CONSTRAINT [PK_#Table#] PRIMARY KEY CLUSTERED
- (
- [ID] ASC
- )WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = ON, ONLINE = OFF) ON [PRIMARY];
- '
- SET @vSQL = Replace(@vSQL, '#Table#', @Table)
- SET @vSQL = Replace(@vSQL, '#Schema#', @Schema)
- print @vSql
- EXEC (@vSql)
- END
----献上代码--------------------------------------
===== by 鬼谷子@魔教=========================
阅读更多
相关文章推荐
- 【代码分享-SQL】(已有数据)表的[ID]字段变更为‘自增长’ 推荐
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- SQL插入数据同时返回当前自增长ID
- SQL语句A、B两表,找出ID字段中,存在A表,但是不存在B表的数据
- sql 查询一个表的数据插入到别一个表,ID自动增长
- [oracle]删除一张表中重复数据,保留其id字段最小的sql
- [SQL]根据刚刚插入数据的 ID 向另外一张表插入数据(插入的其他字段数据需要对字符串进行分析)
- 修改postgresql 数据表 已有字段 自增 sql
- 要查数据表中第30到40条记录,有字段id,但是id并不连续。如何写sql语句?
- SQL Server中根据某个字段,ID字段自动增长的实现
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
- sql 自增长id 也能插入数据
- sqlserver profiler 抓出来作业的代码 SQLAgent - TSQL JobStep,二进制作业名字转化为字段串作业名字,job_id
- SQL-根据id合并多行字段数据
- SQLServer\framework启动报异常:Module的类型初始值设定项引发异常 [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码 window下 mongodb快速安装 数据表查询所有子/父节点 C#学习笔记1
- Sql server 中关闭ID自增字段(SQL取消ID自动增长)
- resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found.
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- sql,mysql插入数据时获取自动增长列的ID
- SQL 在已有很多数据的表中添加一个必填字段的方法,且不影响正常删除字段的方法