SQL Server 2005 - 以编程方式导出表(运行 .sql 文件来重建它)
Posted
技术标签:
【中文标题】SQL Server 2005 - 以编程方式导出表(运行 .sql 文件来重建它)【英文标题】:SQL Server 2005 - Export table programmatically (run a .sql file to rebuild it) 【发布时间】:2010-09-06 10:17:39 【问题描述】:我有一个带有表客户的数据库,其中包含一些数据 我在办公室有另一个数据库,一切都一样,但我的表客户是空的 如何在 SQL Server 2005 (T-SQL) 中创建一个 sql 文件,该文件从第一个数据库中获取客户表中的所有内容,创建一个,比如说 buildcustomers.sql,我压缩该文件,通过网络复制它,执行它在我的 SQL Server 中,瞧!我的表客户已满 我怎样才能对整个数据库做同样的事情?
【问题讨论】:
昨天有一个question关于这个,最好的解决方案是Database Publishing Wizard。 如果您使用 Visual Studio 2008 Team Edition for Database Professionals,这可以通过一个简单的向导来完成:msdn.microsoft.com/en-us/library/aa833411(VS.80).aspx> 另一种方法是使用 Redgate 优秀的 SqlCompare 工具 要选择某个表来编写数据,试试SQL Formatter Add-In for SSMS 【参考方案1】:您可以查看以下文章,了解如何同时使用 SQL Server 原生工具和第三方工具:SQL Server bulk copy and bulk import and export techniques
免责声明:我作为支持工程师在 ApexSQL 工作
希望对你有帮助
【讨论】:
【参考方案2】:我只是想为 Sql Server Management Studio 2008 添加一些屏幕截图。使用前面描述的步骤是正确的。当您有“生成和发布脚本”->“设置脚本选项”时,然后按高级查看脚本选项:
![在哪里可以找到高级脚本选项]:图像丢失,因为我没有正确的声誉:(
对于 Sql Server Management Studio 2008,包含数据的选项是“脚本的数据类型”
![脚本的数据类型]:图像丢失,因为我没有正确的声誉:(
【讨论】:
【参考方案3】:对于 SQL server 2005 中作为 SQL 脚本的 Data Expoer,
http://blog.sqlauthority.com/2007/11/16/sql-server-2005-generate-script-with-data-from-database-database-publishing-wizard/
【讨论】:
【参考方案4】:使用bcp
(从命令行)到网络文件,然后恢复它。
例如
bcp "SELECT * FROM CustomerTable" queryout "c:\temp\CustomerTable.bcp"
-N -S SOURCESERVERNAME -T
bcp TargetDatabaseTable in "c:\temp\CustomerTable.bcp" -N -S TARGETSERVERNAME -T
-N 使用原生类型
-T 使用可信连接
-S 服务器名
在代码中嵌入非常快速和容易。 (我已经围绕这个命令构建了一个数据库备份(恢复)系统。
【讨论】:
哦,这太完美了。可编写脚本、灵活、支持良好且速度非常快。谢谢! 另请参阅this answer 的脚本,该脚本将为每个表生成一个调用 bcp 的批处理文件。 这对我很有用。但是,我建议使用 -E 修改导入命令来处理标识列,并使用 -q 来引用标识符。 -E 将确保插入正确的标识值。 如何在多个表上执行?【参考方案5】:此功能已内置在 Sql Server Management Studio 2008 中。
只需下载the trial 并仅安装客户端工具(不应过期)。使用 Management Studio 2008 连接到您的 2005 数据库(向后兼容)。
-
右键单击您的数据库
选择任务 > 生成脚本
按下一步,再次选择您的数据库
在“选择脚本选项”屏幕上,有一个名为 Script Data 的选项,它将为您的所有数据生成 SQL 插入语句。
(注意:对于 SQL Server Management Studio 2008 R2,该选项称为“脚本的数据类型”,是“常规”部分中的最后一个选项。选项为“仅数据”、“架构和数据”以及“仅模式”)
【讨论】:
感谢您指出 R2 更改!其他人的问题:架构是默认设置,如果您更改目标对象,它会重置为默认设置。 太棒了。正是我想要的! 这是一个很好的答案。需要注意的一件事是,他们搞砸了,现在您必须将“脚本数据类型”设置为“模式和数据”,而不是将“脚本数据”设置为“真”。为了记录,微软在这个废话上很糟糕。它们轻松地提供了我所接触过的最糟糕的数据库工具和界面,我真的很同情任何不得不处理这种废话的人。说真的,我们不得不“生成”而不是“导出”?!见鬼 值得注意的是,在 SQL MGMT 2008 中,选项屏幕上的高级按钮 - 是数据选项所在的位置 你能用 where 子句运行脚本吗?【参考方案6】:如果两个数据库位于同一个 SQL Server 实例中,即使用相同的连接,则此 SQL 可能会有所帮助:
INSERT INTO [DestinationDB].[schema].[table] ([column])
SELECT [column] FROM [OriginDB].[schema].[table]
GO
【讨论】:
这对我不起作用。我选择了“从旧表名中选择 * 到新表名”,如该线程所示 (***.com/questions/680552/table-level-backup)【参考方案7】:您始终可以将客户表中的数据导出到 Excel 文件中,然后将该数据导入您的客户表中。
导入/导出数据:
-
右键单击数据库
转到任务
转到导入数据或导出数据
将数据源更改为 Microsoft Excel
跟随向导
【讨论】:
以上是关于SQL Server 2005 - 以编程方式导出表(运行 .sql 文件来重建它)的主要内容,如果未能解决你的问题,请参考以下文章
如何避免从 C# 构建的 Sql Server 2005 参数化查询变慢