【问题标题】:Exporting data In SQL Server as INSERT INTO将 SQL Server 中的数据导出为 INSERT INTO
【发布时间】:2010-12-03 17:04:10
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server insert data-migration


    【解决方案1】:

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

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

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

    2008 R2 或更高版本,例如 2012

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

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

    【讨论】:

    • 注意:所有这些都只适用于 2008,除了一个。如果您需要在 2005 年执行此操作,请使用“Data Scripter Add-In”
    • SMSS Add In 在 2008 年为我工作。Data Scripter Add In 没有。
    • 在 2008 R2 中,可以在“设置脚本选项”屏幕上找到“脚本数据类型”选项。按那里的“高级”按钮。
    • 这些插件是否在 2008 R2 中工作? SSMS 插件在加载时抛出异常。
    • 看看下面的@ruffin 回答more screenshots
    【解决方案2】:

    为了过于露骨,关注marc_s' instructions to here之后...

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

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

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

    【讨论】:

    • 谢谢,这个按钮的位置不是很直观。我以为它属于“保存到文件”。
    【解决方案3】:

    如果使用 SQLServer 2008R2,则需要将 Types of data 设置为 script 字段。

    【讨论】:

    • 同样适用于2012年。
    • 同样适用于 2014 年。
    • 如果您像我一样感到困惑,“脚本的数据类型”选项仅在“生成脚本...”向导的“高级”选项中可见 - 您在主选项对话框!
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

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

      【讨论】:

        【解决方案6】:

        对于 SQl 服务器 Mng Studio 2016:

        【讨论】:

        • 这是从 SQL Server 2016 版本开始的精确示例。
        【解决方案7】:

        对于那些正在寻找命令行版本的人,Microsoft released 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-DbaDbTable 和 Export-DbaDbTableData cmdlet 来实现这一目标:

        PS C:\> Get-DbaDbTable -SqlInstance sql2016 -Database MyDatabase \
                   -Table 'dbo.Table1', 'dbo.Table2' | 
                Export-DbaDbTableData -Path C:\temp\export.sql
        

        【讨论】:

        • 现在看来mssql-scripter是个死项目了。
        • 没错,去年没有任何进展,但对我来说效果很好。
        【解决方案8】:

        您还可以从以下网址查看 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 子句)。

        • 非常棒的备份实用程序,适用于那些需要数据操作的蹩脚的数据库调试操作。实验时不要丢失数据。动态处理数据!

        【讨论】:

          【解决方案9】:

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

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

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

          首先了解如何从源数据库命令行客户端创建假脱机文件或导出结果集。 其次学习如何在目标db上执行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 的数据库创建的,在这种情况下,无表选择需要使用对偶。

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

          【讨论】:

            【解决方案10】:

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

            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'
            

            【讨论】:

              【解决方案11】:

              经过大量搜索,这是我最好的选择:

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

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

              Screenshot

              【讨论】:

                猜你喜欢
                • 2012-01-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-11-30
                • 2011-06-18
                相关资源
                最近更新 更多