将列更改为标识(SQL Server)

时间:2014-01-13 17:34:58

标签: sql-server tsql sql-server-2008-r2

我的公司有一个带有一堆数据库表的应用程序,这些表用于使用序列表来确定要使用的下一个值。最近,我们将其切换为使用标识属性。问题是,为了将客户端升级到最新版本的软件,我们必须更改大约150个表来识别。要手动执行此操作,您可以右键单击表,选择设计,将(是标识)更改为“是”,然后保存表。根据我的理解,在后台,SQL Server将其导出到临时表,删除表,然后将所有内容复制回新表。客户端可能有自己独特的索引,也可能有其他特定于客户端的东西,因此制作通用脚本实际上并不是一种选择。

如果有一个存储过程来编写此任务的脚本而不是在GUI中执行它(这需要FOREVER),那真的很棒。我们创建了一个可以执行此操作的宏,但即使这样,它也需要很长时间才能运行并且容易出错。类似于:exec sp_change_to_identity'table_name','column name'

这样的事情存在吗?如果没有,你会如何处理这种情况?

更新:这是SQL Server 2008 R2。

1 个答案:

答案 0 :(得分:0)

这就是SSMS似乎所做的事情:

  1. 获取并删除指向原始表的所有外键。
  2. 获取原始表的索引,触发器,外键和统计信息。
  3. 使用Identity字段创建一个与原始表具有相同模式的temp_table。
  4. 将原始表中的所有行(Identity_Insert On)插入temp_table。
  5. 删除原始表(这将删除其索引,触发器,外键和统计信息)
  6. 将temp_table重命名为原始表名
  7. 重新创建在(1)
  8. 中获得的外键
  9. 重新创建在(2)
  10. 中获得的对象