![通过脚本生成SQL 2000中表模式的sql脚本](https://linux22.com/image/584751/%E9%80%9A%E8%BF%87%E8%84%9A%E6%9C%AC%E7%94%9F%E6%88%90SQL%202000%E4%B8%AD%E8%A1%A8%E6%A8%A1%E5%BC%8F%E7%9A%84sql%E8%84%9A%E6%9C%AC.png)
我编写了一些脚本,用于将旧的 sql 2000 db 模式与新的 sql 2000 db 模式进行对比。这是通过循环操作完成的。首先检查我的旧数据库中是否存在任何未找到的表,然后运行表创建脚本来创建该表。是否有任何系统存储过程或脚本可用于表创建?我想要像我们执行“生成 sql 脚本”过程时那样的表脚本。
答案1
Micrsoft 没有提供任何可为您生成对象创建语句的 Transact SQL 系统函数或过程。您可能能够找到其他人编写并发布到互联网上的脚本。
您可以使用其他语言(如 VB、VB.Net、C#、Powershell 甚至 VBScript(通过 Windows Scripting Host))完成一些任务。我认为 Transact-SQL 不是一种适合用于处理大型字符串、文件 I/O 甚至连接到许多其他 SQL Server(执行架构比较等操作)的任务的语言。PowerShell、VB.Net、C# 甚至 VBScript 更加灵活,并且提供了简单的方法来写入文件并连接到另一台服务器(或一千台其他服务器)。每当我想做任何“复杂”的事情并且我可以使用其他东西时,我总是使用其他东西。
我记得,您可以使用 SQL-DMO 对象相当轻松地创建脚本。SQL-DMO 是一组随 SQL Server 2000 工具一起安装的对象。这些对象提供了 SQL Server 2000 和 7.0(甚至可能是 6.5 等旧版本)的简单程序管理。
我现在看到的问题是 SQL 2000 非常老旧(SQL-DMO 在 SQL Server 2005 中被 SMO 取代),而且我通过 Google 找不到 SQL-DMO 库的编程参考。(也许其他人有可以分享的链接?)
SMO 是另一组对象,可以执行 SQL-DMO 可以执行的任何操作。SMO 随 SQL Server 2005(及更高版本)工具一起安装。如果我没记错的话,它也可以作为 Microsoft 站点上的可下载安装程序使用。
SMO 为所有数据库对象提供了一个相当易于使用的 .Script() 函数,因此它主要是查找丢失的对象、获取对现有“好”对象的引用、设置适当的标志、调用 .Script() 并将结果放入文件中以供以后使用的过程。选择适当的标志是最难的部分。(标志会影响 .Script() 的行为。例如,您可以生成带有或不带有主键、带有或不带有相关索引等的脚本。)
总结:
我认为:与编写已经编写的程序相比,有更好的方法来运用你的技能。
我建议您看看 Redgate 的“SQL Compare”、Visual Studio 2010 自己的数据库比较功能、ErWin、Dezign 或开放数据库差异(它是开源的——我听说过它的积极评价,但从未真正使用过)来构建差异脚本。还有许多其他这样的工具。如今,几乎任何数据库 ERD/逻辑/物理关系数据库设计器工具都应该能够提供此类脚本。除了查找丢失的表之外,这些工具还可以做各种有用的事情。它们可以找到丢失的列、丢失的索引、不同的数据类型、不同版本的存储过程或函数、权限差异等。
在依赖所选工具之前,您需要确保它与 SQL 2000 兼容。例如,OpenDBDiff 声称与 SQL Server 2005/2008 兼容,但并未提及 SQL Server 2000。因此,它可能可以正常工作,也可能不能。
如果您确实想编写自己的工具,我建议您使用 Powershell 或 C# 来利用 SMO 中的功能。即使在 Powershell cmdlet 的“新时代”,SMO 也具有更好的功能并且仍然受到良好的支持。