Pregunta

Al no poder encontrar una herramienta de diferenciación de SQL que satisfaga mis necesidades, estoy escribiendo la mía propia.Entre las tablas INFORMACIÓN_SCHEMA y sys, tengo una versión funcional casi completa.Pero una cosa que no puedo encontrar en los metadatos es el definición de un disparador, ya sabes, el código SQL real.¿Estoy pasando por alto algo?

Gracias.


Gracias Pete, ¡no sabía nada de eso!

Scott, estoy trabajando con paquetes de hosting muy básicos que no permiten conexiones remotas a la base de datos.No sé por las especificaciones de RedGate (que de todos modos no puedo pagar) si proporcionan una solución alternativa para eso, y aunque también existen API (como la de Apex), no vi la No tenía sentido invertir en una solución que todavía iba a requerir más programación de mi parte.:)

Mi solución es colocar una página ASPX en el sitio que actúe como una especie de "servicio de esquema" y devuelva los metadatos recopilados como XML.Configuré una pequeña aplicación AJAX que compara cualquier número de instancias de catálogo con un maestro y muestra las diferencias.No es perfecto, pero es un gran paso adelante para mí.

¡Gracias de nuevo!

¿Fue útil?

Solución

sp_helptext funciona para obtener el SQL que constituye un disparador.

La columna de texto en la vista syscomments también contiene el sql utilizado para la creación de objetos.

Otros consejos

Para 2005 y 2008 puede utilizar el OBJETO_DEFINICIÓN() función

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 ampliar la respuesta de SQLMenace, aquí hay una consulta simple para devolver todos los activadores y sus definiciones desde una base de datos:

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 devuelve el disparador con su nombre y cuerpo.

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top