如何从SQL Server生成脚本数据中排除自动生成的列?

时间:2011-02-16 19:15:46

标签: sql-server-2008 data-generation scriptgenerate

SQL Server生成脚本在使用高级选项中的“脚本数据类型”的“仅数据”选项为表中的数据创建脚本方面做得很好。但是,生成的脚本还包括所有标识符,例如rowid()和整数id。可以理解这是参考完整性,但有没有办法排除这些列?

2 个答案:

答案 0 :(得分:1)

SQL Server中似乎没有一种方法可以执行此操作,但是一种快速的解决方法是创建一个初始脚本,然后使用该脚本创建一个临时表。然后,您可以删除不需要的列,并使用临时表为其余列生成SQL语句。

假设您要复制Events表,但不想包含id

  • 转到任务>生成脚本并从Events生成SQL Server脚本。在“高级”选项中,确保同时复制数据和架构。还要确保您没有编写主键或外键的脚本(您仍然会在SQL脚本中看到这些列,但这将使从临时表中快速删除它们变得更加容易)。
  • 在文本编辑器中打开生成的SQL脚本,并使用“查找和替换”来更改表的名称,即从Events更改为EventsTemporary
  • 在SQL Server中使用此脚本创建EventsTemporary表并为其设定种子。从该表中删除您不想复制的列,例如id
  • EventsTemporary表中生成第二个脚本,但是这次只复制“数据”而不使用模式。在文本编辑器中打开此新的SQL脚本,然后将表名称更改回Events
  • 使用SQL Server中的第二个脚本将数据导入到实际的Events表中。

答案 1 :(得分:0)

不在SSMS本身。

您可以使用第三方工具,例如免费SSMS Tools pack,其中包含“从网格结果生成脚本”选项。因此,您可以为SELECT col1, col3, col6 FROM MyTable生成INSERT(跳过某些列)。

可能有用......

enter image description here