Como posso obter a definição (corpo) de um disparador no SQL Server?
-
09-06-2019 - |
Pergunta
Não é possível encontrar um SQL ferramenta de comparação que atende as minhas necessidades, eu estou a escrever o meu próprio.Entre INFORMATION_SCHEMA e sys tabelas, eu tenho uma mais completa versão de trabalho.Mas uma coisa que eu não consigo encontrar em metadados é o definição de um gatilho, você sabe, o real código SQL.Estou vista algo?
Obrigado.
Obrigado, Pete, eu não sabia sobre isso!
Scott, eu estou trabalhando com pacotes de hospedagem que não permite conexões remotas para o DB.Eu não sei desde as especificações sobre RedGate (que eu não posso pagar de qualquer maneira), se se fornecer uma solução para isso, e embora também haja API lá fora (como a partir do Ápice), eu não vejo o ponto em investir em uma solução que ainda vai exigir mais da programação da minha parte.:)
A minha solução é a queda de uma página ASPX no site que funciona como uma espécie de "esquema de serviço", retornando os metadados coletados como XML.Fiz um pouco de AJAX aplicativo que compara com qualquer número de catálogo instâncias de um mestre e mostra os diferenciais.Ele não é perfeito, mas um grande passo a frente para mim.
Obrigado novamente!
Solução
sp_helptext trabalha para obter o sql que faz um gatilho.
A coluna de texto no syscomments ver também contém o sql utilizado para a criação do objeto.
Outras dicas
De 2005 e 2008, você pode usar o OBJECT_DEFINITION() função
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>'
Para expandir SQLMenace a resposta, aqui está uma simples consulta para retornar todos os gatilhos e suas definições a partir de um banco de dados:
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'
esta consulta de retorno gatilho com seu nome e o seu corpo.
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'