我正在使用 SQL Server 2008 Management Studio,并且有一个表要迁移到不同的数据库服务器。
是否有任何选项可以将数据作为插入到 SQL 脚本中导出?
在对象资源管理器的 SSMS 中,右键单击数据库,右键单击并选择“任务”,然后选择“生成脚本”。
这将允许您为单个或所有表生成脚本,其中一个选项是“脚本数据”。如果将其设置为 TRUE,向导将为您的数据生成带有 INSERT INTO () 语句的脚本。
如果使用 2008 R2 或 2012 它被称为别的东西,请参见下面的截图
https://i.stack.imgur.com/1RGpo.png
2008 R2 或更高版本,例如 2012
选择“要脚本的数据类型”,可以是“仅数据”、“模式和数据”或“仅模式” - 默认)。
https://i.stack.imgur.com/oApeb.png
然后在 Codeplex 上有一个“SSMS Addin”包(包括源代码),它承诺几乎相同的功能和更多功能(如快速查找等)
https://i.stack.imgur.com/o398L.png
为了过度露骨的无脑,在遵循marc_s' instructions to here之后......
在对象资源管理器的 SSMS 中,右键单击数据库,右键单击并选择“任务”,然后选择“生成脚本”。
...然后我看到一个向导屏幕,其中包含“简介、选择对象、设置脚本选项、摘要以及保存或发布脚本”,底部有 prev、next、finish、cancel 按钮。
在设置脚本选项步骤中,您必须单击“高级”以获取包含选项的页面。然后,正如 Ghlouw 所提到的,您现在选择“脚本的数据类型”和利润。
https://i.stack.imgur.com/wvNoF.png
如果使用 SQLServer 2008R2,则需要将数据类型设置为脚本字段。
https://i.stack.imgur.com/wzVIY.png
如果您正在运行 SQL Server 2008 R2,则在 SSMS 中执行此操作的内置选项,因为上述 marc_s 发生了一些变化。他的图表中没有选择 Script data = true
,现在在“表格/视图选项”分组上方有一个名为 "Types of data to script"
的新选项。在这里,您可以选择仅脚本数据、模式和数据或仅模式。奇迹般有效。
仅更新屏幕截图以帮助其他人,因为我正在使用更新的 v18,大约 2019 年。
https://i.stack.imgur.com/ee86i.png
https://i.stack.imgur.com/P9rJS.png
在这里,您可以选择某些表格或使用所有表格的默认值。为了我自己的需要,我只表示一张桌子。
接下来,有“脚本选项”,您可以在其中选择输出文件等。正如上面的多个答案(再次,我只是为更新的 v18.4 SQL Server Management Studio 清除旧答案)我们真正想要的位于“高级”按钮下。出于我自己的目的,我只需要数据。
https://i.stack.imgur.com/kirTr.png
https://i.stack.imgur.com/SJQ5D.png
对于 SQL Server Mng Studio 2016:
https://i.stack.imgur.com/jy1xA.png
对于那些正在寻找命令行版本的用户,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
您还可以从以下位置查看 SQL Server Management Studio 2008 的“Data Scripter Add-In”:
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 子句)。
用于那些需要数据操作的蹩脚的数据库调试操作的强大备份实用程序。实验时不要丢失数据。即时操作数据!
以上都很好,但如果你需要
使用连接从多个视图和表中导出数据 为不同的 RDBMS 创建插入语句 将数据从任何 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 的数据库创建的,在该数据库中,无表选择需要使用对偶。
结果集将包含目标数据库的脚本。
下面是一个使用游标创建数据迁移脚本以迭代源表的示例。
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'