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

有任何选项导出数据作为插入到SQL脚本??


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

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

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

2008 R2或更高版本,例如2012

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

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


如果你正在运行SQL Server 2008 R2,在SSMS中内置的选项就像上面描述的marc_s一样发生了一些变化。不再像图中那样选择“脚本数据= true”,现在在“表/视图选项”分组上方有一个名为“脚本数据类型”的新选项。在这里,您可以选择只脚本数据、模式和数据或模式。效果非常好。


你也可以查看SQL Server Management Studio 2008的“Data Scripter插件”:

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


它们的特点如下:

It was developed on SSMS 2008 and is not supported on the 2005 version at this time (soon!) Export data quickly to T-SQL for MSSQL and MySQL syntax CSV, TXT, XML are also supported! Harness the full potential, power, and speed that SQL has to offer. Don't wait for Access or Excel to do scripting work for you that could take several minutes to do -- let SQL Server do it for you and take all the guess work out of exporting your data! Customize your data output for rapid backups, DDL manipulation, and more... Change table names and database schemas to your needs, quickly and efficiently Export column names or simply generate data without the names. You can chose individual columns to script. You can chose sub-sets of data (WHERE clause). You can chose ordering of data (ORDER BY clause). Great backup utility for those grungy database debugging operations that require data manipulation. Don't lose data while experimenting. Manipulate data on the fly!


为了过于明确的无脑,在听从marc_s的指示到这里之后…

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

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

在Set Scripting Options步骤中,您必须单击“Advanced”以获得带有选项的页面。然后,正如Ghlouw提到的,您现在选择“要脚本的数据类型”并获利。


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


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

使用连接从多个视图和表导出数据 为不同的rdbms创建插入语句 将数据从任意RDBMS迁移到任意RDBMS

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

首先学习如何从源db命令行客户端创建spool文件或导出结果集。 第二,学习如何在目标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的db创建的,其中需要使用dual进行无表选择。

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


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

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'

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

在搜索了很多之后,这是我最好的选择:

如果您有大量数据,需要一个紧凑而优雅的脚本,可以试试:SSMS Tools Pack

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

截图


SQl server Mng Studio 2016:


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

在这里,您可以选择某些表或使用所有默认表。出于我自己的需要,我只指出了一个表。

接下来,有“脚本选项”,你可以选择输出文件,等等。与上面的多个答案一样(再次强调,我只是为更新的v18.4 SQL Server Management Studio去掉旧答案),我们真正想要的是在“Advanced”按钮下面。出于我自己的目的,我只需要数据。

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