在SQL Server中将数据导出为INSERT INTO


413

我正在使用SQL Server 2008 Management Studio,并具有要迁移到其他数据库服务器的表。

是否可以将数据作为插入内容导出到SQL脚本中?

Answers:


682

在对象资源管理器的SSMS中,右键单击数据库,右键单击并选择“任务”,然后选择“生成脚本”。

这将允许您为单个或所有表生成脚本,并且选项之一是“脚本数据”。如果将其设置为TRUE,向导将为您的数据生成一个带有INSERT INTO()语句的脚本。

如果使用的是2008 R2或2012 R2,则称为其他名称,请参见下面的截图

替代文字

2008 R2或更高版本,例如2012

选择“脚本的数据类型”,可以是“仅数据”,“模式和数据”或“仅模式”-默认值)。

在此处输入图片说明

然后在Codeplex上有一个“ SSMS Addin ”包(包括源代码),它承诺几乎相同的功能以及更多功能(例如快速查找等)。

替代文字


我刚刚从Codeplex安装了插件。真好 谢谢(你的)信息。
罗布·加里森

1
SMSS Add In在2008年为我工作。DataScripter Add In没有。
菲尔·黑尔

5
在2008 R2中,可以在“设置脚本选项”屏幕上找到“脚本的数据类型”选项。在此按下“高级”按钮。
raymi

3
这些插件在2008 R2中可以工作吗?SSMS插件在加载时引发异常。
jocull 2012年

2
看看下面的@ruffin答案可获得更多屏幕截图
Keith Sirmons 2013年

117

为了过分明了的无脑,在遵循marc_s的指令之后, ...

在对象资源管理器中的SSMS中,右键单击数据库,右键单击并选择“任务”,然后选择“生成脚本”。

...然后,我看到一个向导屏幕,底部有“ 简介,选择对象,设置脚本选项,摘要以及保存或发布脚本,并带有上,下,结束,取消按钮。

在“ 设置脚本选项”步骤上,您必须单击“高级”以获取带有选项的页面。然后,正如Ghlouw所述,您现在选择“要编写脚本的数据类型”并获利。

高级按钮突出显示为红色!1 !!


13
谢谢,此按钮的位置不是很直观。我以为它属于“保存到文件”。
卡雷尔·卡拉


36

如果您运行的是SQL Server 2008 R2,则上述SSc中的内置选项(如上文所述的marc_s)会有所变化。Script data = true现在,没有像他的图所示那样进行选择,而是"Types of data to script"在“表/视图选项”分组的上方添加了一个新选项。在这里,您可以选择仅脚本数据,模式和数据或仅模式。奇迹般有效。



6

对于那些正在寻找命令行版本的用户,Microsoft 发布mssql-scripter了此操作:

$ pip install mssql-scripter

# Generate DDL scripts for all database objects and DML scripts (INSERT statements)
# for all tables in the Adventureworks database and save the script files in
# the current directory
$ mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data \
                 -f './' --file-per-object

看来mssql-scripter现在是一个无效项目。
Alex Suzuki

没错,去年没有任何进展,但是对我来说很好。
Nickolay

3

大约在我使用更新的v18(大约2019年)时更新屏幕截图以帮助其他人。

右键单击数据库:任务>生成脚本

在这里,您可以选择某些表或使用所有表的默认表。

在这里,您可以选择某些表或使用所有表的默认表。对于我自己的需求,我只指示一张桌子。

接下来,有一个“脚本选项”,您可以在其中选择输出文件,等等。正如上面的多个答案一样(再次,我只是将较旧的答案用于更新的v18.4 SQL Server Management Studio),这是我们真正想要的在“高级”按钮下。为了我自己的目的,我只需要数据。

常规输出选项,包括输出到文件。 包括数据在内的高级选项!

最后,执行前会有一个审查摘要。执行后,将显示操作状态报告。 评测总结。


2

您还可以从以下位置签出SQL Server Management Studio 2008的“数据脚本加载项”:

http://www.mssql-vehicle-data.com/SSMS


它们的功能列表:

  • 它是在SSMS 2008上开发的,目前暂时不支持2005版本(很快!)。

  • 快速将数据导出到T-SQL以获取MSSQL和MySQL语法

  • 还支持CSV,TXT,XML!利用SQL必须提供的全部潜能,功能和速度。

  • 不要等待Access或Excel为您完成脚本工作,这可能要花几分钟的时间-让SQL Server为您完成脚本工作,并从导出数据中排除所有猜测工作!

  • 自定义您的数据输出,以进行快速备份,DDL操作等。

  • 快速有效地更改表名和数据库模式

  • 导出列名称或仅生成不带名称的数据。

  • 您可以选择单个列来编写脚本。

  • 您可以选择数据子集(WHERE子句)。

  • 您可以选择数据排序(ORDER BY子句)。

  • 出色的备份实用程序,用于那些需要数据处理的繁琐的数据库调试操作。实验时不要丢失数据。即时处理数据!


2

以上所有都是不错的,但是如果您需要

  1. 使用联接从多个视图和表中导出数据
  2. 为不同的RDBMS创建插入语句
  3. 将数据从任何RDBMS迁移到任何RDBMS

那么以下诀窍是唯一的方法。

首先,学习如何从源db命令行客户端创建假脱机文件或导出结果集。其次,学习如何在目标数据库上执行sql语句。

最后,通过在源数据库上运行sql脚本,为目标数据库创建insert语句(和其他任何语句)。例如

SELECT '-- SET the correct schema' FROM dual;
SELECT 'USE test;' FROM dual;
SELECT '-- DROP TABLE IF EXISTS' FROM dual;
SELECT 'IF OBJECT_ID(''table3'', ''U'') IS NOT NULL DROP TABLE dbo.table3;' FROM dual;
SELECT '-- create the table' FROM dual;
SELECT 'CREATE TABLE table3 (column1 VARCHAR(10), column2 VARCHAR(10));' FROM dual;

SELECT 'INSERT INTO table3 (column1, column2) VALUES (''', table1.column1, ''',''', table2.column2, ''');' FROM table1 JOIN table2 ON table2.COLUMN1 = table1.COLUMN1;

上面的示例是为Oracle数据库创建的,其中无表选择需要使用double。

结果集将包含目标数据库的脚本。


1

这是一个使用游标迭代源表来创建数据迁移脚本的示例。

SET NOCOUNT ON;  
DECLARE @out nvarchar(max) = ''
DECLARE @row nvarchar(1024)
DECLARE @first int = 1

DECLARE cur CURSOR FOR 
    SELECT '(' + CONVERT(CHAR(1),[Stage]) + ',''' + [Label] + ''')'
    FROM CV_ORDER_STATUS
    ORDER BY [Stage]

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS ON'
PRINT 'GO'

PRINT 'INSERT INTO dbo.CV_ORDER_STATUS ([Stage],[Label]) VALUES';

OPEN cur
FETCH NEXT FROM cur
    INTO @row

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @first = 1
        SET @first = 0
    ELSE
        SET @out = @out + ',' + CHAR(13);

    SET @out = @out + @row

    FETCH NEXT FROM cur into @row
END

CLOSE cur
DEALLOCATE cur

PRINT @out

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS OFF'
PRINT 'GO'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.