SQL Server: как генерировать объектные сценарии без DMO / SMO? - PullRequest
2 голосов
/ 26 ноября 2009

Я хочу создать сценарии для объектов базы данных, например,

  • Таблица
  • вид
  • хранимые процедуры
  • функции

С:

не устанавливаются при новой установке:

  • Windows XP
  • Windows Vista
  • Windows 7

и они не подлежат распространению, они не являются опцией ( будет работать на компьютере клиента ).

( EDIT : похоже, что SMO на самом деле распространяется на сегодняшний день.)

Есть ли исходный код, который преобразует SELECTs из системных таблиц в связанные сценарии?


Я начну с псевдокода 1053 *, который создает сценарии для хранимых процедур, представлений, триггеров или пользовательских функций:

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. Вот почему у меня есть класс, который абстрагирует эти вещи.

Ответы [ 3 ]

1 голос
/ 10 декабря 2009

Вы пробовали sp_helptext?

String szQuery = 'EXEC sp_helptext '+QuotedStr(storedProcedureName)
1 голос
/ 26 ноября 2009

Это книга для вас. Он объясняет, как создать генератор кода, который будет делать то, что вы просили.

Я использую модифицированную версию для MySql, и она работала как шарм. Генерация кода в Microsoft .NET

0 голосов
/ 09 февраля 2012

Открыть DBDiff (ссылка здесь ) реализует графический интерфейс для сравнения баз данных и создания сценария обновления. Он также включает в себя инструмент командной строки. Вы можете использовать внутренности проекта для генерации операторов CREATE TABLE.

...