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 文件来重建它)的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 SQL Server 视图导出到 Excel

如何将sql server2005数据库导出

如何将sql server2005数据库导出

如何避免从 C# 构建的 Sql Server 2005 参数化查询变慢

sql Server 怎么把2008高版本数据库用在2005版本上啊

SET IDENTITY_INSERT 从 SQL Server 2000 到 2005 的行为有何不同?