2

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

  • 意见
  • 存储过程
  • 功能

自从:

未安装在全新安装的:

  • 视窗
  • 视窗
  • Windows 7的

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

编辑:从今天开始,看起来 SMO 实际上是可再分发的。)

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


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

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;
}

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

4

3 回答 3

1

你试过 sp_helptext 吗?

String szQuery = 'EXEC sp_helptext '+QuotedStr(storedProcedureName)
于 2009-12-09T21:46:13.980 回答
1

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

我为 MySql 使用了一个修改版本,它就像一个魅力。 Microsoft .NET 中的代码生成

于 2009-11-26T16:08:53.303 回答
0

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

于 2012-02-09T15:07:14.457 回答