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.

Representación 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

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

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:

CREATE TABLE myTable AS

(ColA int CONSTRAINT Const1 DEFAULT 1)

Columna. Del ejemplo, ColA.

No existe una dependencia SQL entre la definición DEFAULT y la columna, dado que el valor Const1 predeterminado no hace referencia a la columna ColA por nombre. En lugar de ello, existe una referencia de clave externa de sys.columns.default_object_id al objeto de definición DEFAULT.

Vea también

Otros recursos

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

Ayuda e información

Obtener ayuda sobre SQL Server 2005