【问题标题】:SQL Server: How to generate object scripts without DMO/SMO?SQL Server:如何在没有 DMO/SMO 的情况下生成对象脚本?
【发布时间】:2023-03-28 19:13:01
【问题描述】:

我想为数据库对象生成脚本,例如

  • 表格
  • 观看次数
  • 存储过程
  • 功能

自:

在全新安装时未安装:

  • Windows XP
  • Windows Vista
  • Windows 7

它们也不是可再分发的,它们不是一种选择(它将在客户的机器上运行)。

编辑:截至今天,看起来 SMO 实际上是 redistributable。)

是否有任何源代码可以将 SELECTs系统表 转换为相关脚本?


我将从编写存储过程、视图、触发器或用户定义函数的伪代码开始:

String GetStoredProcedureScript(String storedProcedureName)
{
   return GetHelpText(storedProcedureName);
}

String GetViewScript(String viewName)
{
   return GetHelpText(viewName);
}

String GetTriggerScript(String triggerName)
{
   return GetHelpText(storedProcedureName);
}

String GetUserDefinedFunctionScript(String userDefinedFunctionName)
{
   return GetHelpText(userDefinedFunctionName);
}

所有可以在内部使用单个辅助函数的:

String GetHelpText(String objectName)
{
   String szQuery = 'EXECUTE sp_helptext '+QuotedStr(objectName);


   String sql := '';

   using (Recordset rs = connection.Execute(szQuery))
   {
      while not rs.EOF do
      {
         sql = sql+rs['text'];
         rs.Next;
      }
   }

   return sql;
}

编辑:感谢servicesharvest316 指出sp_helptext。这就是为什么我有一个将这些东西抽象出来的类。

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?

标签: sql-server scripting sql-server-2000 ddl


【解决方案1】:

这是给你的书。它解释了如何制作一个可以满足您要求的代码生成器。

我为 MySql 使用了一个修改版本,它就像一个魅力。 Code Generation in Microsoft .NET

【讨论】:

  • 你能给我们一些技巧吗?
  • 这是一个多步骤的过程。 1-您必须从数据库中读取元数据(表、列、PKey、FKey、限制,如果您想要安全)。 MySQL 中的数据始终存在一个系统表,该数据库的数据库是 Information_Schema。 2- 你必须在 XSLT 中创建一个典型类的模板 3- 如果你想要你可以添加一个 FreeForm XML 4- 混合所有这些,你将拥有一个完整的类我没有它,但我可以如果你愿意,把我的项目发给你。
【解决方案2】:

你试过 sp_helptext 吗?

String szQuery = 'EXEC sp_helptext '+QuotedStr(storedProcedureName)

【讨论】:

  • 感谢 sp_helptext。这样就完成了所有工作,除了表格。
【解决方案3】:

Open DBDiff(引用 here)实现了一个用于比较数据库和生成更新脚本的 GUI。它还包括一个命令行工具。您可以使用项目的胆量来生成 CREATE TABLE 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多