sql-server insert语法 - 导出数据在SQL Server中作为INSERT INTO




insert命令 sqlserver添加数据 (9)

搜索了很多之后,这是我的最佳镜头:

如果您有大量数据并需要一个简洁而优雅的脚本,请尝试: SSMS Tools Pack

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

Screenshot

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

有没有选择将数据作为插入导出到SQL脚本中?


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

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


如果您正在运行SQL Server 2008 R2,则在SSMS中执行此操作的内置选项会随着marc_s的变化而变化。 如图所示,不是选择Script data = true ,而是在“Table / View Options”分组的上方新增了一个名为"Types of data to script"的新选项。 在这里,您可以选择仅脚本数据,架构和数据或架构。 奇迹般有效。


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

  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。

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


您还可以通过以下方式查看SQL Server Management Studio 2008的“Data Scripter插件”:

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

  • 对于那些需要数据操作的蹩脚数据库调试操作而言,它是一个很棒的备份工具 在实验过程中不要丢失数据。 即时处理数据!


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

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中,右键单击数据库,右键单击并选择“任务”,然后选择“生成脚本”。

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

如果使用2008 R2或2012,则将其称为其他内容,请参阅下面的屏幕截图

2008 R2或更高版本,例如2012

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

然后在Codeplex上有一个“ SSMS Addin ”包(包括源码),它承诺功能非常相似,还有一些功能(比如快速查找等)


如果您插入到单个表中,则可以像这样编写查询(可能仅在MySQL中):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');




sql sql-server insert data-migration