首页 文章

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

提问于
浏览
354

我正在使用SQL Server 2008 Management Studio并且有一个表我想要迁移到另一个数据库服务器 .

有没有选项将数据导出为插入SQL脚本?

10 回答

  • 35

    搜索了很多,这是我最好的拍摄:

    如果您有大量数据并且需要紧凑而优雅的脚本,请尝试:SSMS Tools Pack

    它生成一个union all语句,用于将项插入目标表并很好地处理事务 .

    Screenshot

  • 0

    对于SQl服务器Mng Studio 2016:

    enter image description here

  • 95

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

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

    If using 2008 R2 or 2012 it is called something else, see screenshot below this one

    alt text

    2008 R2或更高版本,例如2012

    选择“脚本数据类型”,可以是“仅数据”,“架构和数据”或“仅架构” - 默认值) .

    enter image description here

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

    alt text

  • 3

    为了过度明显的无脑,跟随marc_s' instructions to here ...

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

    ...然后我看到一个带有“ Introduction, Choose Objects, Set Scripting Options, Summary, and Save or Publish Scripts ”的向导屏幕,其中包含prev,next,finish,底部的取消按钮 .

    Set Scripting Options step 上,您必须 click "Advanced" 才能获得包含选项的页面 . 然后,如Ghlouw所述,您现在选择"Types of data to script"并获利 .

    advanced button HIGHLIGHTED IN RED!1!!

  • 1

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

    enter image description here

  • 2

    如果您正在运行SQL Server 2008 R2,则内置选项可以在SSMS中执行此操作,因为上面描述的marc_s稍有改动 . 现在,在"Table/View Options"分组之上,现在有一个名为 "Types of data to script" 的新选项,而不是如图所示选择 Script data = true . 在这里,您可以选择仅脚本数据,仅脚本和数据或模式 . 奇迹般有效 .

  • 0

    对于那些寻找命令行版本的人,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
    
  • 2

    您还可以从以下位置查看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子句) .

    • 伟大的备份实用程序,适用于那些需要数据操作的低级数据库调试操作 . 在试验期间不要丢失数据 . 即时操作数据!

  • 610

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

    • 从具有连接的多个视图和表中导出数据

    • 为不同的RDBMS创建插入语句

    • 将数据从任何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的db创建的,其中无表选择需要使用dual .

    结果集将包含目标db的脚本 .

  • 40

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

    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'
    

相关问题