2009-11-26 4 views
2

Я хочу сгенерировать скрипты для объектов базы данных, например.SQL Server: как сгенерировать объектные скрипты без DMO/SMO?

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

С:

не установлены на новую установку:

  • Windows XP
  • для Windows Vista
  • Windows 7

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

(EDIT: Это выглядит так, как будто на самом деле SMO redistributable по состоянию на сегодняшний день.)

Есть ли исходный код, который преобразует ВЫБИРАЕТ из системных таблиц в связанные сценарии?


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

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

+0

Какую версию SQL Server вы используете? – RickNZ

+0

SQL Server 2000 –

ответ

1

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

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

+0

Можете ли вы дать нам намек на методы? –

+0

Это многоэтапный процесс. 1- Вы должны прочитать метаданные из базы данных (таблица, столбцы, PKey, FKey, ограничения, если вы хотите обеспечить безопасность). Всегда существует системная таблица с данными в базе данных MySQL, для которой является Information_Schema. 2- Вы должны сделать шаблон youre типичного класса в XSLT 3- Если вы хотите, вы можете добавить FreeForm XML 4- Завершить все это, и у вас будет полный класс У меня его нет со мной, но я могу отправить вам свой проект, если хотите. –

1

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

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

Спасибо за sp_helptext. Это делает все, кроме таблиц. –

0

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