2012-10-02 42 views
1

当生成数据库脚本时,我正在脚本化数据以迁移到不同的环境。在脚本生成中是否有一个设置可以让IDENTITY_INSERT自动开启/关闭,因此我不必在生成的脚本中手动查看每个表并设置它?我使用SSMS,我想通过SSMS来做到这一点。SQL Server生成具有标识插入的脚本

这里就是我得到:

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 

回答

1

你没有说你使用什么工具来生成脚本,但如果你有一个工具如红门数据比较,如果在比较中包含自动增量字段,它将为您生成这些语句。我不知道SSMS有这样的选择。

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

+0

我使用的生成脚本... SSMS的内部选项。 SSMS内部有什么可以做到吗? –

+1

好的。我不相信SSMS可以让你选择这样做。我只是看了看,没有看到任何。 –

+0

我想的很多。谢谢。这太遗憾了。 –

2

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

当使用生成在SQL Server Management Studio中(SSMS)的脚本任务生成数据的脚本,set identity_insert发言将包括对具有标识列的表。

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

  • 如果表来自的脚本数据不具有具有标识属性的列,因此不会生成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列。

  • 新列重命名为原始列名

相关问题