我正在使用 SQL Server 2008 管理工具,并且有一个表需要迁移到其他数据库服务器。
是否有将数据导出为插入到 SQL 脚本的选项?
我正在使用 SQL Server 2008 管理工具,并且有一个表需要迁移到其他数据库服务器。
是否有将数据导出为插入到 SQL 脚本的选项?
选择“要脚本的数据类型”,可以是“仅数据”,“架构和数据”或“仅架构”(默认)。
然后在Codeplex上有一个"SSMS Addin"包(包括源代码),承诺提供几乎相同的功能和更多功能(例如快速查找等)
为了避免过于详细的无脑操作,在按照marc_s的指示到达这里之后...
在SSMS对象资源管理器中,右键单击数据库并选择“任务”,然后选择“生成脚本”。
... 然后我看到一个向导屏幕,上面有“介绍、选择对象、设置脚本选项、摘要和保存或发布脚本”,底部有前一页、下一页、完成、取消按钮。
在设置脚本选项步骤中,你需要点击“高级”以获取带有选项的页面。接着,如Ghlouw所提到的,你现在选择“要编写脚本的数据类型”,即可受益。
对于那些寻找命令行版本的人,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
dbatools.io 是一个基于 PowerShell 的活跃度更高的项目,它提供了 Get-DbaDbTable 和 Export-DbaDbTableData 命令来实现此功能:
PS C:\> Get-DbaDbTable -SqlInstance sql2016 -Database MyDatabase \
-Table 'dbo.Table1', 'dbo.Table2' |
Export-DbaDbTableData -Path C:\temp\export.sql
以上内容很好,但如果您需要:
那么以下技巧是唯一的方法。
首先学习如何从源数据库命令行客户端创建 spool 文件或导出结果集。 其次学习如何在目标数据库上执行 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;
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'