Informazioni sulle dipendenze SQL
Data creazione: 5 dicembre 2005
Le dipendenze SQL sono i riferimenti in base al nome utilizzati nelle espressioni SQL per creare dipendenze tra gli oggetti. Per individuare tutte le dipendenze in base al nome, è possibile eseguire una query nella vista del catalogo sys.sql_dependencies. Per ogni riga presente in sys.sql_dependencies, l'entità con riferimenti (referenced_major_id) viene visualizzata in base al nome in un'espressione SQL persistente dell'oggetto di riferimento.
Nella figura seguente viene illustrato un esempio di dipendenza SQL.
Nella figura sono presenti due oggetti: la procedura X e la procedura Y. La procedura X contiene un'espressione SQL che presenta un riferimento in base al nome alla procedura Y. La procedura X è definita oggetto di riferimento o dipendente, mentre la procedura Y è definita oggetto con riferimenti o indipendente. Poiché la procedura X dipende dalla procedura Y, se quest'ultima non esiste, la procedura X genererà un errore di run-time. Diversamente, la procedura Y non genera un errore se la procedura X non esiste.
Nell'esempio seguente viene illustrata la dipendenza della stored procedure X
dalla stored procedure Y
.
USE tempdb
GO
CREATE PROCEDURE Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE X as
EXEC Y
GO
Per visualizzare la dipendenza di X
da Y
, eseguire la query seguente.
SELECT *
FROM sys.sql_dependencies
WHERE object_id = object_id('X')
AND referenced_major_id = object_id('Y')
AND referenced_minor_id = 0
AND class = 0;
GO
Se si elimina la procedura X
, è comunque possibile eseguire la procedura Y
poiché la procedura Y
è indipendente dalla procedura X
. Al contrario, se si elimina la procedura Y
e si tenta di eseguire la procedura X
, in SQL Server viene generato un errore di run-time. La procedura X
, infatti, dipende dalla procedura Y
.
Quando si elimina la procedura Y
, viene eliminata anche la riga della procedura X
nella vista del catalogo sys.sql_dependencies. Per osservare questo comportamento, eseguire il codice seguente:
USE tempdb;
GO
DROP PROCEDURE Y;
GO
SELECT *
FROM sys.sql_dependencies
WHERE object_id = object_id('X')
AND referenced_major_id = object_id('Y')
AND referenced_minor_id = 0
AND class = 0;
GO
È possibile utilizzare la clausola WITH SCHEMABINDING per applicare la manutenzione delle dipendenze. Se si associa una vista allo schema, non è possibile modificare o eliminare la tabella o le colonne con riferimenti interrompendo una dipendenza. Analogamente, se si associa una funzione allo schema, non è possibile modificare o eliminare gli oggetti o le colonne con riferimenti interrompendo le dipendenze della funzione. Per ulteriori informazioni sull'associazione allo schema, vedere Creazione di funzioni definite dall'utente (Motore di database) e Progettazione e implementazione di viste.
[!NOTA] SQL Server 2005 non supporta stored procedure o trigger associati allo schema.
Esempi di dipendenze SQL
Nella tabella seguente sono riportati alcuni esempi di dipendenze SQL che possono sussistere tra gli oggetti di riferimento e quelli con riferimenti.
Tipo di oggetto di riferimento
Espressione SQL nella colonna di definizione della vista del catalogo
Esempio di entità con riferimenti
Procedura, funzione, vista, trigger
sys.sql_modules
Nota:
Per i trigger a livello server, vedere sys.server_sql_modules
Tabella, procedura, tipo
Colonna calcolata
sys.computed_columns
Funzione, tipo, altra colonna
Definizione DEFAULT
sys.default_constraints
Funzione
Vincolo CHECK
sys.check_constraints
Funzione, funzione di partizione
Procedura numerata
sys.numbered_procedure
Tabella, procedura, tipo
Funzione associata a schema
sys.sql_modules
Insieme di schemi XML
Esempi di dipendenze non SQL
Non tutte le dipendenze esistenti tra gli oggetti sono di tipo SQL. Se un oggetto non dispone di un'espressione SQL contenente un riferimento basato sul nome a un altro oggetto, non esiste una dipendenza SQL tra i due oggetti. Nella tabella seguente vengono riportati alcuni esempi di dipendenze non SQL.
Tipo di oggetto di riferimento | Dipendente da | Descrizione |
---|---|---|
Colonna |
Tabella |
La dipendenza tra la tabella e le relative colonne è implicita. Questa relazione è espressa nel catalogo di sistema dalla chiave esterna sys.columns.object_id. |
Definizione DEFAULT in una colonna, ad esempio:
|
Colonna. Nell'esempio precedente, |
Non esiste una dipendenza SQL tra la definizione DEFAULT e la colonna poiché il vincolo predefinito |
Vedere anche
Altre risorse
sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)