martedì 17 giugno 2014

CODICE TRIGGER, VIEW O STORED PROCEDURE DA SCRIPT SQL

Sto lavorando sul progetto SQL DOCUMENTATION GENERATOR esposto qualche giorno fa. Mi sono imbattuto nel problema di ottenere, tramite script SQL, il codice di un Trigger su una tabella, una Vista o di una Stored Procedure.

Per prima cosa è necessario conoscere un po' meglio la struttura di un database Microsoft SQL Server, in particolare le system views. Fra le tante viste di sistema abbiamo la sys.sysobjects, che contiene l'elenco degli oggetti sql (tabelle, trigger, stored procedure ...) e la sys.syscomments, che contiene il codice di creazione degli oggetti, fra loro sono legate con un id univoco.


Le colonne importanti della tabella sys.sysobjects sono:
  • NAME, nome dell'oggetto (tabella, trigger, stored procedure...)
  • XTYPE, tipo dell'oggetto (U=tabella, TR=trigger, P=stored procedure...)
  • ID, identificativo univoco dell'oggetto, necessario per la join con la sys.syscomment
Le colonne importanti della tabella sys.syscomments sono:
  • ID, identificativo univoco dell'oggetto, necessario per la join con la sys.sysobjects.
  • TEXT, codice di generazione dell'oggetto
Dopo aver decritto nello specifico la teoria andiamo nella pratica con la query per ottenere il codice di Trigger e Stored Procedure.

use <DATABASE>
select o.name,o.xtype,c.text  from 
sys.sysobjects as o
inner join
sys.syscomments as c
on o.id = c.id
where o.xtype = 'TR' or o.xtype = 'P'

Attenzione!

Nulla vieta di utilizzare direttamente le tabelle sys.views, sys.tables, sys.procedures ecc.. Quasi tutti gli oggetti hanno il codice di generazione nella tabella sys.syscomments.

Nessun commento:

Posta un commento