Descripción de las dependencias SQL
Nuevo: 5 de diciembre de 2005
Las dependencias SQL son las referencias por nombre utilizadas en expresiones SQL para hacer que un objeto dependa de otro. Puede buscar todas las dependencias por nombre al realizar un consulta a la vista de catálogo sys.sql_dependencies. Para cada fila en sys.sql_dependencies, la entidad a la que se hace referencia (referenced_major_id) aparece por nombre en una expresión SQL persistente del objeto de referencia.
En la siguiente ilustración se muestra un ejemplo de una dependencia SQL.
En la ilustración, se muestran dos objetos: procedimiento X y procedimiento Y. El procedimiento X contiene una expresión SQL que tiene una referencia por nombre al procedimiento Y. El procedimiento X se conoce como el objeto dependiente o que hace referencia, y el procedimiento Y se conoce como el objeto independiente o referenciado. Dado que el procedimiento X depende del procedimiento Y, el procedimiento X generará un error en tiempo de ejecución si el procedimiento Y no existe. Sin embargo, el procedimiento Y no generará error si el procedimiento X no existe.
El ejemplo siguiente muestra cómo el procedimiento almacenado X
puede depender del procedimiento almacenado Y
.
USE tempdb
GO
CREATE PROCEDURE Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE X as
EXEC Y
GO
Para ver la dependencia de X
en Y
, ejecute la consulta siguiente.
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
Si elimina el procedimiento X
, aún puede ejecutar el procedimiento Y
. El procedimiento Y
es independiente del procedimiento X
. Por el contrario, si elimina el procedimiento Y
e intenta ejecutar el procedimiento X
, SQL Server devuelve un error en tiempo de ejecución. El procedimiento X
depende del procedimiento Y
.
Tras la eliminación del procedimiento Y
, también se elimina la fila del procedimiento X
de la vista de catálogo sys.sql_dependencies. Para ver este comportamiento, ejecute el código siguiente.
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
Puede utilizar la cláusula WITH SCHEMABINDING para exigir el mantenimiento de las dependencias. Si se enlaza una vista al esquema, no podrá modificar o eliminar la tabla ni las columnas referenciadas de tal forma que se anule la dependencia. Del mismo modo, si se enlaza una función al esquema, no podrá modificar o eliminar las columnas ni los objetos referenciados de tal forma que se anulen las dependencias de la función. Para obtener más información sobre enlaces a esquema, vea Crear funciones definidas por el usuario (motor de base de datos) y Diseñar e implementar vistas.
[!NOTA] SQL Server 2005 no admite desencadenadores ni procedimientos almacenados enlazados a esquema.
Ejemplos de dependencias SQL
La tabla siguiente enumera algunos ejemplos de dependencias SQL que pueden existir entre objetos que hacen referencia y objetos referenciados.
Tipo de objeto que hace referencia
Expresión SQL en columnas de definición de las vistas de catálogo
Ejemplo de entidad referenciada
Procedimiento, función, vista, desencadenador
sys.sql_modules
Nota:
Para obtener información sobre desencadenadores en el servidor, vea sys.server_sql_modules.
Tabla, procedimiento, tipo
Columnas calculadas
sys.computed_columns
Función, tipo, otra columna
Definición DEFAULT
sys.default_constraints
Función
Restricción CHECK
sys.check_constraints
Función, función de partición
Procedimiento numerado
sys.numbered_procedures
Tabla, procedimiento, tipo
Función enlazada a esquema
sys.sql_modules
Colección de esquemas XML
Ejemplos de dependencias no SQL
No todas las dependencias que existen entre objetos son dependencias SQL. Si un objeto no tiene una expresión SQL que contiene una referencia por nombre a otro objeto, no existe una dependencia SQL entre los dos objetos. La tabla siguiente enumera algunos ejemplos de dependencias no SQL.
Tipo de objeto que hace referencia | Depende de | Descripción |
---|---|---|
Columna |
Tabla |
La dependencia entre la tabla y sus columnas es implícita. Esta relación se expresa en el catálogo del sistema como la clave externa sys.columns.object_id. |
Definición DEFAULT para una columna, por ejemplo:
|
Columna. Del ejemplo, |
No existe una dependencia SQL entre la definición DEFAULT y la columna, dado que el valor |
Vea también
Otros recursos
sys.sql_dependencies (Transact-SQL)
sys.syscharsets (Transact-SQL)
sp_depends (Transact-SQL)