Domanda

Impossibile trovare uno strumento di confronto SQL che soddisfi le mie esigenze, sto scrivendo il mio.Tra le tabelle INFORMAZIONI_SCHEMA e sys, ho una versione funzionante per lo più completa.Ma una cosa che non riesco a trovare nei metadati è il file definizione di un trigger, sai, il vero codice SQL.Sto trascurando qualcosa?

Grazie.


Grazie Pete, non lo sapevo!

Scott, sto lavorando con pacchetti di hosting molto semplici che non consentono connessioni remote al DB.Non so dalle specifiche su RedGate (che comunque non posso permettermi) se forniscono una soluzione alternativa a questo, e sebbene ci siano anche API là fuori (come quella di Apex), non ho visto il punto di investire in una soluzione che avrebbe comunque richiesto maggiore programmazione da parte mia.:)

La mia soluzione è rilasciare una pagina ASPX sul sito che funge da sorta di "servizio schema", restituendo i metadati raccolti come XML.Ho creato una piccola app AJAX che confronta un numero qualsiasi di istanze del catalogo con un master e mostra le differenze.Non è perfetto, ma per me è un grande passo avanti.

Grazie ancora!

È stato utile?

Soluzione

sp_helptext funziona per ottenere l'SQL che costituisce un trigger.

La colonna di testo nella vista syscomments contiene anche l'SQL utilizzato per la creazione dell'oggetto.

Altri suggerimenti

Per il 2005 e il 2008 è possibile utilizzare il file OBJECT_DEFINIZIONE() funzione

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>'

Per espandere la risposta di SQLMenace, ecco una semplice query per restituire tutti i trigger e le relative definizioni da un database:

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' 

questa query restituisce il trigger con il suo nome e 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'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top