467

我正在使用 SQL Server 2008 Management Studio,并且有一个表要迁移到不同的数据库服务器。

是否有任何选项可以将数据作为插入到 SQL 脚本中导出?

4

11 回答 11

748

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

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

如果使用 2008 R2 或 2012 它被称为别的东西,请参见下面的截图

替代文字

2008 R2 或更高版本,例如 2012

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

在此处输入图像描述

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

替代文字

于 2009-10-04T09:02:18.937 回答
137

为了过度明确的无脑,在按照marc_s 的说明到这里之后......

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

...然后我会看到一个向导屏幕,其中包含“简介、选择对象、设置脚本选项、摘要以及保存或发布脚本”,底部有 prev、next、finish、cancel 按钮。

在“设置脚本选项”步骤中,您必须单击“高级”以获取包含选项的页面。然后,正如Ghlouw所提到的,您现在选择“脚本的数据类型”和利润。

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

于 2012-10-23T14:08:00.983 回答
54

如果使用 SQLServer 2008R2,则需要将数据类型设置为脚本字段。

在此处输入图像描述

于 2013-05-29T02:01:52.143 回答
37

如果您正在运行 SQL Server 2008 R2,则在 SSMS 中执行此操作的内置选项,因为上述 marc_s 发生了一些变化。现在,在“表/视图选项”分组上方有一个新选项,而不是Script data = true像他的图表中所示的那样选择。"Types of data to script"在这里,您可以选择仅脚本数据、模式和数据或仅模式。奇迹般有效。

于 2011-08-02T08:09:57.340 回答
18

仅更新屏幕截图以帮助其他人,因为我正在使用更新的 v18,大约 2019 年。

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

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

在这里,您可以选择某些表格或使用所有表格的默认值。为了我自己的需要,我只表示一张桌子。

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

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

最后是执行前的审查总结。执行后显示操作状态报告。 评测总结。

于 2020-04-21T16:53:51.593 回答
10

对于 SQL Server Mng Studio 2016:

在此处输入图像描述

于 2018-06-28T12:26:47.950 回答
8

对于那些寻找命令行版本的人,微软发布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

dbatools.io是一个更加活跃的基于 PowerShell 的项目,它提供了Get-DbaDbTableExport-DbaDbTableData cmdlet 来实现此目的:

PS C:\> Get-DbaDbTable -SqlInstance sql2016 -Database MyDatabase \
           -Table 'dbo.Table1', 'dbo.Table2' | 
        Export-DbaDbTableData -Path C:\temp\export.sql
于 2017-10-17T00:08:48.977 回答
2

您还可以从以下位置查看 SQL Server Management Studio 2008 的“Data Scripter Add-In”:

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


他们的功能列表:

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

  • 针对 MSSQL 和 MySQL 语法将数据快速导出到 T-SQL

  • 还支持 CSV、TXT、XML!充分利用 SQL 所提供的潜力、能力和速度。

  • 不要等待 Access 或 Excel 为您完成可能需要几分钟才能完成的脚本工作 - 让 SQL Server 为您完成,并消除导出数据的所有猜测工作!

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

  • 快速高效地根据您的需要更改表名和数据库模式

  • 导出列名或简单地生成没有名称的数据。

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

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

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

  • 用于那些需要数据操作的蹩脚的数据库调试操作的强大备份实用程序。实验时不要丢失数据。即时操作数据!

于 2012-04-22T01:51:24.553 回答
2

以上都很好,但如果你需要

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

那么下面的技巧是唯一的方法。

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

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

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 的数据库创建的,在该数据库中,无表选择需要使用对偶。

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

于 2015-07-06T11:11:56.010 回答
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'
于 2016-09-09T20:23:14.850 回答
0

经过大量搜索,这是我最好的镜头:

如果你有大量数据并且需要一个简洁优雅的脚本,试试看:SSMS Tools Pack

它生成一个联合所有选择语句以将项目插入目标表并很好地处理事务。

截屏

于 2018-03-22T14:29:28.403 回答