繁体   English   中英

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

[英]Exporting data In SQL Server as INSERT INTO

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

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

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

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

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

替代文字

2008 R2 或更高版本,例如 2012

选择“脚本的数据类型”,可以是“仅数据”、“架构和数据”或“仅架构”——默认值)。

在此处输入图片说明

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

替代文字

为了过于明确的无脑,在按照marc_s 的指示到这里之后......

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

...然后我会看到一个向导屏幕,其中包含“介绍、选择对象、设置脚本选项、摘要和保存或发布脚本”,底部有上一个、下一个、完成、取消按钮。

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

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

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

在此处输入图片说明

如果您运行的是 SQL Server 2008 R2,则在 SSMS 中执行此操作的内置选项如上述 marc_s 略有更改。 现在没有选择Script data = true如他的图表中所示,现在有一个名为"Types of data to script"的新选项位于“Table/View Options”分组上方。 在这里您可以选择仅编写数据脚本、模式和数据或仅模式。 奇迹般有效。

对于 SQL Server Mng Studio 2016:

在此处输入图片说明

只是更新屏幕截图以帮助其他人,因为我使用的是 2019 年左右的较新 v18。

右键单击 DB:任务 > 生成脚本

您可以在此处选择某些表或使用所有表的默认值。

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

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

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

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

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

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

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 子句)。

  • 适用于需要数据操作的那些脏兮兮的数据库调试操作的出色备份实用程序。 实验时不要丢失数据。 即时操作数据!

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

  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 的 db 创建的,其中无表选择需要使用 dual 。

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

下面是使用游标创建数据迁移脚本以迭代源表的示例。

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'

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

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

它生成一个 union all select 语句以将项目插入目标表并很好地处理事务。

截屏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM