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.

Illustrazione di una 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

ms345449.note(it-it,SQL.90).gifNota:

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:

CREATE TABLE myTable AS

(ColA int CONSTRAINT Const1 DEFAULT 1)

Colonna. Nell'esempio precedente, ColA.

Non esiste una dipendenza SQL tra la definizione DEFAULT e la colonna poiché il vincolo predefinito Const1 non fa riferimento alla colonna ColA in base al nome. È invece presente un riferimento mediante chiave esterna da sys.columns.default_object_id all'oggetto definizione DEFAULT.

Vedere anche

Altre risorse

sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005