SQL Server使用标识插件生成脚本

时间:2012-10-02 19:02:47

标签: sql-server-2008 identity-insert generate-scripts

生成数据库脚本时,我正在编写要迁移到其他环境的数据。我是否可以启用脚本生成中的设置来自动设置IDENTITY_INSERT,因此我不必在生成的脚本中手动遍历每个表并进行设置?我正在使用SSMS,我想通过SSMS这样做。

这是我得到的:

INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');

这就是我想要的:

SET IDENTITY_INSERT my_table ON
INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');
SET IDENTITY_INSERT my_table OFF

2 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但对于SSMS,接受的答案和对已接受答案的评论都不太正确。

在Sql Server Management Studio(SSMS)中使用生成脚本任务生成包含数据的脚本时,将为包含标识列的表包含set identity_insert语句。

在对象资源管理器中:任务 - >生成脚本 - > [所有表格选定的表格] - >高级 - > [具有数据数据的模式]

  • 如果来自的脚本数据表没有带有identity属性的列,则它不会生成set identity_insert语句。

  • 如果来自的脚本数据表的列具有标识属性,则会生成set identity_insert语句。

经测试&确认使用SSMS 2008& SSMS 2012

在OP的情况下,我猜测源表没有在源表中为my_table_id设置标识属性,但是在目标表中为my_table_id设置了标识属性。

要获取所需的输出,请将表更改为脚本数据,以使my_table_id具有标识属性。

本文深入介绍了执行此操作的步骤(不使用SSMS中的设计器):Add or drop identity property for an existing SQL Server column - Greg Robidoux

  • 使用标识属性

  • 创建一个新列
  • 将数据从现有id列传输到新列

  • 删除现有的id列。

  • 将新列重命名为原始列名

答案 1 :(得分:1)

您没有说出用于生成脚本的工具,但如果您有像Red-Gate Data Compare这样的工具,如果您在比较中包含自动增量字段,它将为您生成这些语句。我不知道SSMS有这样的选择。

如果您有Visual Studio Premium或Ultimate版本,那么您还可以访问具有数据比较和同步选项的DBPro(Database Professional)。我相信这也会为你生成IDENTITY_INSERT语句。