将已有数据的表的[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的方式)

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索table
, schema
, 字段
, identity
, 创建字段自增长
, alter
字段自增长
asp 检测已有字段、mysql字段自动增长、sql修改字段为自增长、oracle字段自动增长、oracle字段自增长,以便于您获取更多的相关知识。

时间: 2024-09-17 04:49:01

将已有数据的表的[ID]字段变更为自增长的相关文章

数据-C# sql 查找每个分库中某表某ID字段重复的记录

问题描述 C# sql 查找每个分库中某表某ID字段重复的记录 目前30个分库中,每个库目前至少有100万条记录,每个库同有一个数据表A,表结构相同.每个表的主键叫recordID,但是各个分库间会重复不唯一.需求一个思路.忽略数据表设计问题,目前就是做出这个工具而已,表设计问题不管. 目前我是利用Sorteddiction的contains方法判断重复,但是会出现内存溢出的问题.OutOfMemory 解决方案 建临时表,先把所有表的recordID集中起来,然后再判断重复.

SQL 已有数据的表创建标识列

 针对已有数据的表创建标识列: Alter table TableName Add FID bigint identity(1,1) constraint FID_1 primary key(FID)  

grails在有数据的表中新增字段,如何为新增字段赋初值?

问题描述 有没有人做过对有数据的表中增加一字段,通过grails的domain对应新增字段的属性设定数据库表的默认值,怎么设置.我这边不论怎么设置,新增的domain属性,在有数据的表中其字段的值永远都是(null),可我想要我设定的默认值我该怎么做?如某domain中定义新增的属性intsynDelType=0;数据库对应的表中列syn_del_type的值一直都是(null)注:是在有数据的表,新加属性重新启动工程对新加列赋初值,不是在new或者update的时候赋初值因为新加这个字段,就是

mybatis动态insert-mybatis 动态insert 传入表名、字段名、数据

问题描述 mybatis 动态insert 传入表名.字段名.数据 需求: 输入:1000个不同的csv文件,每个csv文件10000条记录: 输出:将这些文件存储到每个csv文件对应的数据库中的表中: 求动态sql的书写???: 注:csv文件的第一行和数据库中的字段名一致 解决方案 mybatis 传入动态表名MyBatis动态传入表名,字段名参数的解决办法MyBatis,动态传入表名,字段名的解决办法 解决方案二: insert into #{表名} (#{字段1},#{字段2}) val

excel2013数据透视表如何制作

  excel透视表制作步骤如下: 1.用Excel2013打开一篇工作表,切换到"插入"选项卡,单击"表格"组中的"推荐的数据透视表"按钮. 2.此时会弹出一个"推荐的数据透视表"窗口,我们在左侧的类型中根据需要选择一个数据透视表,右侧有它对应的效果,然后单击"确定"按钮. 3.返回到Excel中,我们看到窗口右侧多出了一个"数据透视表字段"窗格,大家可以在其中选择要添加到数据透视表中

用excel中数据透视表分类求数据平均值方法

考试结束,教育部门要求全市学生的成绩都汇总在如图1的同一个Excel工作表中,并要求求出各学校.各专业.各学科的平均分. 全市三个学校.每个学校都有六个专业.每个专业都有五门课.各专业人数不等,总计有1000余人,工作量巨大.但如果采用Excel数据透视表来完成的话,呵呵,就简单多了. 一.创建数据透视表 点击菜单命令"数据→数据透视表和数据透视图",打开"数据透视表和数据透视图向导"对话框. 第一步,如图2所示,选择"Microsoft Excel数据列

Excel2010表格中数据透视表的改进方法

通过以下的改进和新增功能,用户可在Microsoft Excel2010中更加轻松和快捷地使用数据透视表和联机分析处理(OLAP)数据透视表. 计算性能 在Excel2010中,多线程计算有助于加快数据透视表中的计算速度,从而提高数据透视表的整体性能.这意味着,当您处理大量数据时(例如对数据透视表中的数据进行排序和筛选时),可以更快地获得结果. 数据透视表标签 在Excel2010中,您可以在数据透视表中向下填充标签,因而能够更加轻松地使用数据透视表.还可以在数据透视表中重复标签,在所有的行和列

如何使用Excel2013中推荐的数据透视表

  "数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关如果原始数据发生更改,则可以更新数据透视表."以上是百度百科中的概念,按照小编的理解,数据透视表能够按照我们的要求提取某些特定的原始数据,也可以对他们进行运算.而且Excel2013中有推荐的数据透视表,我们可以用它来研究看看数据透视表到底是什么样的. 使用推荐的数据透视表的方法: 1.用Excel2013打开一篇工作表,切换到"插入&quo

sql-在一个已有数据的表里添加一列,并在此列添加另一个表里数据,两张表有id关联

问题描述 在一个已有数据的表里添加一列,并在此列添加另一个表里数据,两张表有id关联 现有数据表table1,table2,table1的列为id,name,table2的列为id,age. 两张表里都已有数据,现需要将table2里的age数据添加到table1,要怎么处理 注,已尝试过 添加一列后 update table1 a set a.age=(select b.age from table2 b where a.id=b.id) 运行后a.age 仍然为null 求解答,不胜感激 解