生成数据库脚本时,我正在编写要迁移到其他环境的数据。我是否可以启用脚本生成中的设置来自动设置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
答案 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语句。