Ответ 1
sp_helptext работает, чтобы получить sql, который составляет триггер.
Текстовый столбец в представлении syscomments также содержит sql, используемый для создания объекта.
Невозможно найти инструмент SQL diff, соответствующий моим потребностям, я пишу сам. Между таблицами INFORMATION_SCHEMA и sys у меня есть в основном полная рабочая версия. Но одна вещь, которую я не могу найти в метаданных, - это определение триггера, как вы знаете, фактического кода SQL. Я что-то пропускаю?
Спасибо.
Спасибо, Пит, я не знал об этом!
Скотт, я работаю с очень базовыми пакетами хостинга, которые не позволяют удаленных подключений к БД. Я не знаю из спецификаций RedGate (которые я не могу позволить себе так или иначе), обеспечивают ли они обходной путь для этого, и хотя там есть API (например, один из Apex), я не видел что инвестировать в решение, которое по-прежнему будет требовать больше программирования с моей стороны.:)Мое решение - удалить страницу ASPX на сайте, которая действует как своего рода "служба схемы", возвращая собранные метаданные в формате XML. Я создал небольшое приложение AJAX, которое сравнивает любое количество экземпляров каталога с мастером и показывает различия. Это не идеальный, но важный шаг вперед для меня.
Еще раз спасибо!
sp_helptext работает, чтобы получить sql, который составляет триггер.
Текстовый столбец в представлении syscomments также содержит sql, используемый для создания объекта.
В 2005 и 2008 годах вы можете использовать функцию OBJECT_DEFINITION()
SELECT
DB_NAME() AS DataBaseName,
dbo.SysObjects.Name AS TriggerName,
dbo.sysComments.Text AS SqlContent
FROM
dbo.SysObjects INNER JOIN
dbo.sysComments ON
dbo.SysObjects.ID = dbo.sysComments.ID
WHERE
(dbo.SysObjects.xType = 'TR')
AND
dbo.SysObjects.Name = '<YourTriggerName>'
Чтобы расширить ответ SQLMenace, попробуйте простой запрос, чтобы вернуть все триггеры и их определения из базы данных:
SELECT
sysobjects.name AS trigger_name,
OBJECT_NAME(parent_obj) AS table_name,
OBJECT_DEFINITION(id) AS trigger_definition
FROM sysobjects
WHERE sysobjects.type = 'TR'
этот запрос возвращает триггер с его именем и телом.
Select
[tgr].[name] as [trigger name],
[tbl].[name] as [table name] ,
OBJECT_DEFINITION(tgr.id) body
from sysobjects tgr
join sysobjects tbl
on tgr.parent_obj = tbl.id
WHERE tgr.xtype = 'TR'