다음을 통해 공유


sys.sql_expression_dependencies(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)SQL 분석 엔드포인트

현재 데이터베이스의 사용자 정의 엔터티에 대한 각 이름별 종속성에 대해 하나의 행을 포함합니다. 여기에는 고유하게 컴파일된 스칼라 사용자 정의 함수와 기타 SQL Server 모듈 간의 종속성이 포함됩니다. 참조된 엔터티라고 하는 하나의 엔터티가 참조하는 엔터티라고 하는 다른 엔터티의 지속형 SQL 식에 이름으로 나타날 때 두 엔터티 간의 종속성이 만들어집니다. 예를 들어 뷰 정의에서 테이블을 참조하면 참조 엔터티인 뷰는 참조된 엔터티인 테이블에 종속됩니다. 테이블이 삭제되면 뷰를 사용할 수 없습니다.

자세한 내용은 메모리 내 OLTP에 대한 사용자 정의 스칼라 함수를 참조하세요.

이 카탈로그 뷰를 사용하여 다음 엔터티에 대한 종속성 정보를 보고할 수 있습니다.

  • 스키마 바운드 엔터티

  • 스키마 바인딩되지 않은 엔터티입니다.

  • 데이터베이스 간 및 서버 간 엔터티입니다. 엔터티 이름이 보고됩니다. 그러나 엔터티 ID는 확인되지 않습니다.

  • 스키마 바인딩된 엔터티에 대한 열 수준 종속성입니다. 스키마 바인딩되지 않은 개체에 대한 열 수준 종속성은 sys.dm_sql_referenced_entities 사용하여 반환할 수 있습니다.

  • 서버 수준 DDL은 master 데이터베이스의 컨텍스트에서 트리거됩니다.

열 이름 데이터 형식 설명
referencing_id int 참조하는 엔터티의 ID입니다. Null을 허용하지 않습니다.
referencing_minor_id int 참조 엔터티가 열인 경우 열 ID입니다. 그렇지 않으면 0입니다. Null을 허용하지 않습니다.
referencing_class tinyint 참조 엔터티의 클래스입니다.

1 = 개체 또는 열

12 = 데이터베이스 DDL 트리거

13 = 서버 DDL 트리거

Null을 허용하지 않습니다.
referencing_class_desc nvarchar(60) 참조 엔터티 클래스에 대한 설명입니다.

OBJECT_OR_COLUMN

DATABASE_DDL_TRIGGER

SERVER_DDL_TRIGGER

Null을 허용하지 않습니다.
is_schema_bound_reference bit 1 = 참조된 엔터티가 스키마 바인딩됩니다.

0 = 참조된 엔터티가 스키마에 바인딩되지 않습니다.

Null을 허용하지 않습니다.
referenced_class tinyint 참조된 엔터티의 클래스입니다.

1 = 개체 또는 열

6 = 형식

10 = XML 스키마 컬렉션

21 = Partition 함수

Null을 허용하지 않습니다.
referenced_class_desc nvarchar(60) 참조된 엔터티 클래스에 대한 설명입니다.

OBJECT_OR_COLUMN

TYPE

XML_SCHEMA_COLLECTION

PARTITION_FUNCTION

Null을 허용하지 않습니다.
referenced_server_name sysname 참조된 엔터티의 서버 이름입니다.

이 열은 유효한 4부로 구성된 이름을 지정하여 만들어진 서버 간 종속성에 대해 채워집니다. 다중 파트 이름에 대한 자세한 내용은 Transact-SQL 구문 규칙을 참조 하세요.

네 부분으로 된 이름을 지정하지 않고 엔터티를 참조한 스키마 바인딩되지 않은 엔터티의 경우 NULL입니다.

스키마 바인딩된 엔터티는 동일한 데이터베이스에 있어야 하므로 두 부분으로 구성된(schema.object) 이름을 사용하여 정의할 수 있기 때문에 NULL입니다.
referenced_database_name sysname 참조된 엔터티의 데이터베이스 이름입니다.

이 열은 유효한 3부 또는 4부로 구성된 이름을 지정하여 만들어진 데이터베이스 간 또는 서버 간 참조에 대해 채워집니다.

한 부분 또는 두 부분으로 된 이름을 사용하여 지정된 비스키마 바운드 참조의 경우 NULL입니다.

스키마 바인딩된 엔터티는 동일한 데이터베이스에 있어야 하므로 두 부분으로 구성된(schema.object) 이름을 사용하여 정의할 수 있기 때문에 NULL입니다.
referenced_schema_name sysname 참조된 엔터티가 속한 스키마입니다.

스키마 이름을 지정하지 않고 엔터티를 참조한 스키마 바인딩되지 않은 참조의 경우 NULL입니다.

스키마 바인딩된 엔터티를 정의하고 두 부분으로 된 이름을 사용하여 참조해야 하므로 스키마 바인딩된 참조의 경우 NULL이 안 됩니다.
referenced_entity_name sysname 참조된 엔터티의 이름입니다. Null을 허용하지 않습니다.
referenced_id int 참조된 엔터티의 ID입니다. 이 열의 값은 스키마 바운드 참조에 대해 NULL이 되지 않습니다. 이 열의 값은 서버 간 및 데이터베이스 간 참조의 경우 항상 NULL입니다.

ID를 확인할 수 없는 경우 데이터베이스 내의 참조에 대한 NULL입니다. 비스키마 바운드 참조는 다음과 같은 경우 ID를 확인할 수 없습니다.

참조된 엔터티가 데이터베이스에 없는 경우

참조된 엔터티의 스키마는 호출자의 스키마에 따라 달라지고 런타임에 확인됩니다. 이 경우 is_caller_dependent 1로 설정됩니다.
referenced_minor_id int 참조 엔터티가 열인 경우 참조된 열의 ID이며 그렇지 않은 경우 0입니다. Null을 허용하지 않습니다.

참조된 엔터티는 열이 참조하는 엔터티의 이름으로 식별되거나 부모 엔터티가 SELECT * 문에서 사용되는 경우 열입니다.
is_caller_dependent bit 참조된 엔터티에 대한 스키마 바인딩이 런타임에 발생했음을 나타냅니다. 따라서 엔터티 ID의 확인은 호출자의 스키마에 따라 달라집니다. 이는 참조된 엔터티가 저장 프로시저, 확장 저장 프로시저, 또는 EXECUTE 문에서 호출되는 비스키마 바운드 사용자 정의 함수인 경우에 발생합니다.

1 = 참조된 엔터티는 호출자에 종속되며 런타임에 확인됩니다. 이 경우 referenced_id NULL입니다.

0 = 참조된 엔터티 ID가 호출자에 종속되지 않습니다.

스키마 이름을 명시적으로 지정하는 스키마 바운드 참조와 데이터베이스 간 및 서버 간 참조의 경우 항상 0입니다. 예를 들어 형식 EXEC MyDatabase.MySchema.MyProc 의 엔터티에 대한 참조는 호출자에 종속되지 않습니다. 그러나 형식 EXEC MyDatabase..MyProc 의 참조는 호출자에 따라 다릅니다.
is_ambiguous bit 참조가 모호하며 런타임에 사용자 정의 함수, UDT(사용자 정의 형식) 또는 xml 형식 열에 대한 xquery 참조로 확인할 수 있음을 나타냅니다.

예를 들어 문이 SELECT Sales.GetOrder() FROM Sales.MySales 저장 프로시저에 정의되어 있다고 가정합니다. 저장 프로시저가 실행될 때까지 스키마의 사용자 정의 함수인지 또는 이름이 지정된 Sales.GetOrder()메서드가 있는 Sales UDT 형식의 열 Sales 인지 GetOrder() 알 수 없습니다.

1 = 참조가 모호합니다.

0 = 참조가 명확하거나 뷰를 호출할 때 엔터티를 바인딩할 수 있습니다.

스키마 바인딩 참조의 경우 항상 0입니다.

설명

다음 표에서는 종속성 정보를 만들고 유지 관리하는 엔터티 유형을 나열합니다. 종속성 정보는 규칙, 기본값, 임시 테이블, 임시 저장 프로시저 또는 시스템 개체에 대해 생성되거나 유지 관리되지 않습니다.

참고 항목

Azure Synapse Analytics 및 병렬 데이터 웨어하우스는 이 목록의 테이블, 뷰, 필터링된 통계 및 Transact-SQL 저장 프로시저 엔터티 형식을 지원합니다. 종속성 정보는 테이블, 보기 및 필터링된 통계에 대해서만 생성되고 유지 관리됩니다.

엔터티 형식 엔터티 참조 참조된 엔터티
테이블 예*
보기
필터링된 인덱스 네** 아니요
필터링된 통계 네** 아니요
Transact-SQL 저장 프로시저***
CLR 저장 프로시저 아니요
Transact-SQL 사용자 정의 함수
CLR 사용자 정의 함수 아니요
CLR 트리거(DML 및 DDL) 아니요 아니요
Transact-SQL DML 트리거 아니요
Transact-SQL 데이터베이스 수준 DDL 트리거 아니요
Transact-SQL 서버 수준 DDL 트리거 아니요
확장된 저장 프로시저 아니요
Queue 아니요
동의어 아니요
형식(별칭 및 CLR 사용자 정의 형식) 아니요
XML 스키마 컬렉션 아니요
파티션 함수 아니요

* 테이블은 계산 열, CHECK 제약 조건 또는 DEFAULT 제약 조건 정의에서 Transact-SQL 모듈, 사용자 정의 형식 또는 XML 스키마 컬렉션을 참조하는 경우에만 참조 엔터티로 추적됩니다.

** 필터 조건자에서 사용되는 각 열은 참조 엔터티로 추적됩니다.

정수 값이 1보다 큰 번호가 매겨진 저장 프로시저는 참조 또는 참조된 엔터티로 추적되지 않습니다.

사용 권한

데이터베이스에 대한 VIEW DEFINITION 권한과 데이터베이스의 sys.sql_expression_dependencies에 대한 SELECT 권한이 필요합니다. 기본적으로 SELECT 권한은 db_owner 고정 데이터베이스 역할의 멤버에게만 부여됩니다. SELECT와 VIEW DEFINITION 권한을 다른 사용자에게 부여하면 피부여자는 데이터베이스의 모든 종속성을 볼 수 있습니다.

예제

A. 다른 엔터티에서 참조하는 엔터티 반환

다음 예는 Production.vProductAndDescription 뷰에서 참조되는 테이블과 열을 반환합니다. 뷰는 열과 열에 반환된 엔터티(테이블 및 referenced_entity_name 열)에 referenced_column_name 따라 달라집니다.

USE AdventureWorks2022;  
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');  
GO  
  

B. 다른 엔터티를 참조하는 엔터티 반환

다음 예제에서는 테이블을 Production.Product참조하는 엔터티를 반환합니다. 열에 반환된 referencing_entity_name 엔터티는 테이블에 따라 달라집니다 Product .

USE AdventureWorks2022;  
GO  
SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
    OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
    referencing_class_desc, referenced_class_desc,  
    referenced_server_name, referenced_database_name, referenced_schema_name,  
    referenced_entity_name,   
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
    is_caller_dependent, is_ambiguous  
FROM sys.sql_expression_dependencies AS sed  
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
WHERE referenced_id = OBJECT_ID(N'Production.Product');  
GO  
  

C. 데이터베이스 간 종속성 반환

다음 예제에서는 모든 데이터베이스 간 종속성을 반환합니다. 이 예제에서는 먼저 데이터베이스 및 데이터베이스 db1 의 테이블을 참조하는 두 개의 저장 프로시저를 만듭니다db2db3. sys.sql_expression_dependencies 그런 다음 테이블을 쿼리하여 프로시저와 테이블 간의 데이터베이스 간 종속성을 보고합니다. 프로시저 정의에서 해당 엔터티 referenced_schema_namet3 대해 스키마 이름이 지정되지 않았기 때문에 참조된 엔터티의 열에 NULL이 반환됩니다.

CREATE DATABASE db1;  
GO  
USE db1;  
GO  
CREATE PROCEDURE p1 AS SELECT * FROM db2.s1.t1;  
GO  
CREATE PROCEDURE p2 AS  
    UPDATE db3..t3  
    SET c1 = c1 + 1;  
GO  
SELECT OBJECT_NAME (referencing_id),referenced_database_name,   
    referenced_schema_name, referenced_entity_name  
FROM sys.sql_expression_dependencies  
WHERE referenced_database_name IS NOT NULL;  
GO  
USE master;  
GO  
DROP DATABASE db1;  
GO  
  

참고 항목

sys.dm_sql_referenced_entities(Transact-SQL)
sys.dm_sql_referencing_entities(Transact-SQL)