sp_describe_first_result_set(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) SQL 분석 엔드포인트

Transact-SQL 일괄 처리의 가능한 첫 번째 결과 집합에 대한 메타데이터를 반환합니다. 일괄 처리에서 아무 결과도 반환되지 않은 경우 빈 결과 집합을 반환합니다. 데이터베이스 엔진 정적 분석을 수행하여 실행할 첫 번째 쿼리의 메타데이터를 확인할 수 없는 경우 오류가 발생합니다. 동적 관리 뷰 sys.dm_exec_describe_first_result_set(Transact-SQL) 는 동일한 정보를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

  
sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch'   
    [ , [ @params = ] N'parameters' ]   
    [ , [ @browse_information_mode = ] <tinyint> ] ]  

인수

[ @tsql = ] 'Transact-SQL_batch' 하나 이상의 Transact-SQL 문입니다. Transact-SQL_batch nvarchar(n) 또는 nvarchar(max)일 수 있습니다.

[ @params = ] N'parameters' @params sp_executesql 유사한 Transact-SQL 일괄 처리에 대한 매개 변수에 대한 선언 문자열을 제공합니다. 매개 변수는 nvarchar(n) 또는 nvarchar(max)일 수 있습니다.

Transact-SQL_batch 포함된 모든 매개 변수의 정의를 포함하는 하나의 문자열입니다. 문자열은 유니코드 상수 또는 유니코드 변수여야 합니다. 각 매개 변수 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다. n 은 추가 매개 변수 정의를 나타내는 자리 표시자입니다. 문에 지정된 모든 매개 변수는 @params 정의해야 합니다. 문의 Transact-SQL 문 또는 일괄 처리에 매개 변수가 없는 경우 @params 필요하지 않습니다. NULL이 이 매개 변수의 기본값입니다.

[ @browse_information_mode = ] tinyint 추가 키 열 및 원본 테이블 정보가 반환되는지를 지정합니다. 1로 설정되면 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 각 쿼리가 분석됩니다. 추가 키 열 및 원본 테이블 정보가 반환됩니다.

  • 0으로 설정하면 정보가 반환되지 않습니다.

  • 1로 설정되면 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 각 쿼리가 분석됩니다. 그러면 원본 열 정보로 기본 테이블 이름을 반환합니다.

  • 2로 설정되면 쿼리에 커서 준비 또는 실행에 사용되는 것처럼 각 쿼리가 분석됩니다. 이렇게 하면 뷰 이름이 원본 열 정보로 반환됩니다.

반환 코드 값

sp_describe_first_result_set 항상 성공에 대해 0의 상태 반환합니다. 프로시저가 오류를 throw하고 프로시저가 RPC로 호출되는 경우 반환 상태 sys.dm_exec_describe_first_result_set error_type 열에 설명된 오류 유형으로 채워집니다. Transact-SQL에서 프로시저를 호출하는 경우 오류가 있는 경우에도 반환 값은 항상 0입니다.

결과 집합

이 일반적인 메타데이터는 결과 메타데이터의 각 열에 대해 하나의 행이 있는 결과 집합으로 반환됩니다. 각 행은 다음 섹션에 설명된 형식으로 열의 유형과 Null 허용 여부를 설명합니다. 모든 컨트롤 경로에 대해 첫 번째 문이 없으면 행이 0인 결과 집합이 반환됩니다.

열 이름 데이터 형식 설명
is_hidden 비트 NOT NULL 열이 정보 검색을 위해 추가된 추가 열이며 실제로 결과 집합에 표시되지 않음을 나타냅니다.
column_ordinal int NOT NULL 결과 집합에 있는 열의 서수 위치를 포함합니다. 첫 번째 열의 위치는 1로 지정됩니다.
이름 sysname NULL 이름을 확인할 수 있는 경우 열의 이름을 포함합니다. 그렇지 않으면 NULL이 포함됩니다.
is_nullable 비트 NOT NULL 열이 NULL을 허용하는 경우 1, 열이 NULL을 허용하지 않는 경우 0, 열이 NULL을 허용하는지 확인할 수 없는 경우 1을 포함합니다.
system_type_id int NOT NULL sys.types에 지정된 열의 데이터 형식 system_type_id 포함합니다. CLR 형식의 경우 system_type_name 열이 NULL을 반환하더라도 이 열은 값 240을 반환합니다.
system_type_name nvarchar(256) NULL 열의 데이터 형식에 대해 지정된 이름 및 인수(예: 길이, 정밀도, 소수 자릿수)를 포함합니다. 데이터 형식이 사용자 정의 별칭 형식인 경우 기본 시스템 형식이 여기에 지정됩니다. CLR 사용자 정의 형식인 경우 이 열에 NULL이 반환됩니다.
max_length smallint NOT NULL 열의 최대 길이(바이트)입니다.

-1 = 열 데이터 형식이 varchar(max), nvarchar(max), varbinary(max) 또는 xml입니다.

텍스트 열의 경우 max_length 값은 16 또는 sp_tableoption ‘text in row’에 의해 설정된 값입니다.
전체 자릿수 tinyint NOT NULL 숫자 기반일 경우 열의 전체 자릿수이고 그렇지 않은 경우 0을 반환합니다.
scale tinyint NOT NULL 숫자 기반인 경우 열의 배율입니다. 그렇지 않은 경우 0을 반환합니다.
collation_name sysname NULL 문자 기반인 경우 열의 데이터 정렬 이름입니다. 그렇지 않으면 NULL을 반환합니다.
user_type_id int NULL CLR 및 별칭 형식의 경우 sys.types에 지정된 대로 열의 데이터 형식 user_type_id 포함합니다. 그렇지 않으면 NULL입니다.
user_type_database sysname NULL CLR 및 별칭 형식의 경우 해당 형식이 정의된 데이터베이스의 이름을 포함합니다. 그렇지 않으면 NULL입니다.
user_type_schema sysname NULL CLR 및 별칭 형식의 경우 해당 형식이 정의된 스키마의 이름을 포함합니다. 그렇지 않으면 NULL입니다.
user_type_name sysname NULL CLR 및 별칭 형식의 경우 형식 이름입니다. 그렇지 않으면 NULL입니다.
assembly_qualified_type_name nvarchar(4000) CLR 형식의 경우 어셈블리의 이름과 형식을 정의하는 클래스를 반환합니다. 그렇지 않으면 NULL입니다.
xml_collection_id int NULL sys.columns에 지정된 대로 열의 데이터 형식에 대한 xml_collection_id 포함합니다. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.
xml_collection_database sysname NULL 이 형식과 연결된 XML 스키마 컬렉션이 정의된 데이터베이스를 포함합니다. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.
xml_collection_schema sysname NULL 이 형식과 연결된 XML 스키마 컬렉션이 정의된 스키마를 포함합니다. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.
xml_collection_name sysname NULL 이 형식과 연결된 XML 스키마 컬렉션의 이름을 포함합니다. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.
is_xml_document 비트 NOT NULL 반환된 데이터 형식이 XML이고 해당 형식이 XML 조각이 아닌 완전한 XML 문서(루트 노드 포함)라고 보장될 경우 1을 반환합니다. 그렇지 않은 경우 0을 반환합니다.
is_case_sensitive 비트 NOT NULL 열이 대/소문자를 구분하는 문자열 형식이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
is_fixed_length_clr_type 비트 NOT NULL 열이 고정 길이 CLR 형식이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
source_server sysname 이 결과의 열에서 반환된 원래 서버의 이름입니다(원격 서버에서 시작된 경우). 이름은 sys.servers에 표시되면 지정됩니다. 열이 로컬 서버에서 시작되거나 열이 시작되는 서버를 확인할 수 없는 경우 NULL을 반환합니다. 검색 정보가 요청된 경우에만 채워집니다.
source_database sysname 이 결과의 열에서 반환된 원래 데이터베이스의 이름입니다. 데이터베이스를 확인할 수 없는 경우 NULL을 반환합니다. 검색 정보가 요청된 경우에만 채워집니다.
source_schema sysname 이 결과의 열에서 반환된 원래 스키마의 이름입니다. 스키마를 확인할 수 없는 경우 NULL을 반환합니다. 검색 정보가 요청된 경우에만 채워집니다.
source_table sysname 이 결과의 열에서 반환된 원래 테이블의 이름입니다. 테이블을 확인할 수 없는 경우 NULL을 반환합니다. 검색 정보가 요청된 경우에만 채워집니다.
source_column sysname 결과 열에서 반환된 원래 열의 이름입니다. 열을 확인할 수 없는 경우 NULL을 반환합니다. 검색 정보가 요청된 경우에만 채워집니다.
is_identity_column 비트 NULL 열이 ID 열이면 1을 반환하고 그렇지 않으면 0을 반환합니다. 열이 ID 열인지 확인할 수 없는 경우 NULL을 반환합니다.
is_part_of_unique_key 비트 NULL 열이 고유 인덱스(고유 및 기본 제약 조건 포함)의 일부인 경우 1을 반환하고, 그렇지 않으면 0을 반환합니다. 열이 고유 인덱스의 일부임을 확인할 수 없는 경우 NULL을 반환합니다. 정보 검색을 요청할 경우에만 채워집니다.
is_updateable 비트 NULL 열이 업데이트 가능한 경우 1을 반환하고 그렇지 않으면 0을 반환합니다. 열이 업데이트 가능한지 확인할 수 없으면 NULL을 반환합니다.
is_computed_column 비트 NULL 열이 계산 열일 경우 1을 반환하고 그렇지 않으면 0을 반환합니다. 열이 계산 열인지 확인할 수 없으면 NULL을 반환합니다.
is_sparse_column_set 비트 NULL 열이 스파스 열일 경우 1을 반환하고 그렇지 않으면 0을 반환합니다. 열이 스파스 열 집합의 일부임을 확인할 수 없는 경우 NULL을 반환합니다.
ordinal_in_order_by_list smallint NULL ORDER BY 목록에서 이 열의 위치입니다. 열이 ORDER BY 목록에 없거나 ORDER BY 목록을 고유하게 확인할 수 없을 경우 NULL을 반환합니다.
order_by_list_length smallint NULL ORDER BY 목록의 길이입니다. ORDER BY 목록이 없거나 ORDER BY 목록을 고유하게 확인할 수 없는 경우 NULL을 반환합니다. 이 값은 sp_describe_first_result_set 반환된 모든 행에 대해 동일합니다.
order_by_is_descending smallint NULL ordinal_in_order_by_list NULL 이 아닌 경우 order_by_is_descending 열은 이 열에 대한 ORDER BY 절의 방향을 보고합니다. 그렇지 않으면 NULL을 보고합니다.
tds_type_id int NOT NULL 내부용.
tds_length int NOT NULL 내부용.
tds_collation_id int NULL 내부용.
tds_collation_sort_id tinyint NULL 내부용.

설명

sp_describe_first_result_set 프로시저가 (가상) 일괄 처리 A에 대한 첫 번째 결과 집합 메타데이터를 반환하고 해당 일괄 처리(A)가 이후에 실행되는 경우 일괄 처리가 (1) 최적화 시간 오류를 발생시키거나, (2) 런타임 오류를 발생시키거나, (3) 결과 집합을 반환하지 않거나, (4) sp_describe_first_result_set 설명한 것과 동일한 메타데이터를 사용하여 첫 번째 결과 집합을 반환하도록 보장합니다.

이름, Null 허용 여부 및 데이터 형식이 다를 수 있습니다. sp_describe_first_result_set 빈 결과 집합을 반환하는 경우 일괄 처리 실행에서 결과 없음 집합을 반환합니다.

이 보장은 서버에 관련 스키마 변경 내용이 없다고 가정합니다. 서버의 관련 스키마 변경에는 일괄 처리 A에 임시 테이블 또는 테이블 변수를 만드는 작업이 포함되지 않습니다. 여기에는 sp_describe_first_result_set 호출된 시간과 실행 중에 결과 집합이 반환되는 시간(일괄 처리 B의 스키마 변경 포함)이 포함됩니다.

sp_describe_first_result_set 다음 경우에 오류를 반환합니다.

  • 입력 @tsql 유효한 Transact-SQL 일괄 처리가 아닌 경우 유효성은 Transact-SQL 일괄 처리를 구문 분석하고 분석하여 결정됩니다. 쿼리 최적화 중 또는 실행 중에 일괄 처리로 인한 오류는 Transact-SQL 일괄 처리가 유효한지 여부를 결정할 때 고려되지 않습니다.

  • @params NULL이 아니고 매개 변수에 대해 구문적으로 유효한 선언 문자열이 아닌 문자열을 포함하거나 매개 변수를 두 번 이상 선언하는 문자열이 포함된 경우

  • 입력 Transact-SQL 일괄 처리가 @params 선언된 매개 변수와 동일한 이름의 지역 변수를 선언하는 경우

  • 문이 임시 테이블을 사용하는 경우

  • 쿼리에 다음으로 쿼리되는 영구 테이블 생성이 포함되는 경우

다른 모든 확인이 성공한 경우에는 입력 일괄 처리 내에서 가능한 모든 제어 흐름 경로가 고려됩니다. 모든 제어 흐름 문(GOTO, IF/ELSE, WHILE 및 Transact-SQL TRY/CATCH 블록)뿐만 아니라 EXEC 문에 의해 입력 일괄 처리에서 호출된 프로시저, 동적 Transact-SQL 일괄 처리 또는 트리거, DDL 트리거를 발생시키는 DDL 문 또는 대상 테이블 또는 외래 키에 대한 연속 작업으로 인해 수정된 테이블에서 트리거가 발생하도록 하는 DML 문을 고려합니다. 제약 조건. 가능한 컨트롤 경로가 많은 경우 알고리즘이 중지되는 경우도 있습니다.

각 제어 흐름 경로에 대해 결과 집합을 반환하는 첫 번째 문(있는 경우)은 sp_describe_first_result_set 의해 결정됩니다.

일괄 처리에서 가능한 첫 번째 문이 여러 개 있으면 열 수, 열 이름, null 허용 여부 및 데이터 형식이 다를 수 있습니다. 이러한 차이점을 처리하는 방법은 여기에서 자세히 설명합니다.

  • 열 수가 다르면 오류가 throw되고 결과가 반환되지 않습니다.

  • 열 이름이 다르면 반환된 열 이름이 NULL로 설정됩니다.

  • Null 허용 여부가 다른 경우 반환되는 Null 허용 여부가 NULL을 허용합니다.

  • 데이터 형식이 다른 경우 오류가 throw되고 다음 경우를 제외하고 결과가 반환되지 않습니다.

    • varchar(a) to varchar(a') where a' > a.

    • varchar(a) to varchar(max)

    • nvarchar(a) to nvarchar(a') where a' > a.

    • nvarchar(a)에서 nvarchar(max)로

    • varbinary(a) to varbinary(a') where a' > a.

    • varbinary(a)에서 varbinary(max)로

sp_describe_first_result_set 간접 재귀를 지원하지 않습니다.

사용 권한

@tsql 인수를 실행할 수 있는 권한이 필요합니다.

예제

일반적인 예제

A. 간단한 예

다음 예제에서는 단일 쿼리에서 반환된 결과 집합에 대해 설명합니다.

sp_describe_first_result_set @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes'  

다음 예에서는 매개 변수가 포함된 단일 쿼리에서 반환되는 결과 집합을 보여 줍니다.

sp_describe_first_result_set @tsql =   
N'SELECT object_id, name, type_desc   
FROM sys.indexes   
WHERE object_id = @id1'  
, @params = N'@id1 int'  

B. 찾아보기 모드 예제

다음 세 가지 예제는 여러 가지 탐색 정보 모드 간의 주요 차이점을 보여줍니다. 관련 열만 쿼리 결과에 포함되었습니다.

정보가 반환되지 않음을 나타내는 0을 사용하는 예제입니다.

CREATE TABLE dbo.t (a int PRIMARY KEY, b1 int);  
GO  
CREATE VIEW dbo.v AS SELECT b1 AS b2 FROM dbo.t;  
GO  
EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM dbo.v', null, 0;  

결과 집합은 다음과 같습니다.

is_hidden column_ordinal name source_schema source_table source_column is_part_of_unique_key
0 1 b3 NULL NULL NULL NULL

1을 사용하는 예제는 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 정보를 반환합니다.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 1  
  

결과 집합은 다음과 같습니다.

is_hidden column_ordinal name source_schema source_table source_column is_part_of_unique_key
0 1 b3 dbo t B1 0
1 2 a dbo t a 1

커서를 준비하는 것처럼 분석되었음을 나타내는 2를 사용하는 예제입니다.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 2  

결과 집합은 다음과 같습니다.

is_hidden column_ordinal name source_schema source_table source_column is_part_of_unique_key
0 1 B3 dbo v B2 0
1 2 ROWSTAT NULL NULL NULL 0

C. 테이블에 결과 저장

일부 시나리오에서는 스키마를 추가로 처리할 수 있도록 프로시저 결과를 sp_describe_first_result_set 일부 테이블에 배치해야 합니다. 먼저 프로시저의 sp_describe_first_result_set 출력과 일치하는 테이블을 만들어야 합니다.

create table #frs (
    is_hidden bit not null,
    column_ordinal int not null,
    name sysname null,
    is_nullable bit not null,
    system_type_id int not null,
    system_type_name nvarchar(256) null,
    max_length smallint not null,
    precision tinyint not null,
    scale tinyint not null,
    collation_name sysname null,
    user_type_id int null,
    user_type_database sysname null,
    user_type_schema sysname null,
    user_type_name sysname null,
    assembly_qualified_type_name nvarchar(4000),
    xml_collection_id int null,
    xml_collection_database sysname null,
    xml_collection_schema sysname null,
    xml_collection_name sysname null,
    is_xml_document bit not null,
    is_case_sensitive bit not null,
    is_fixed_length_clr_type bit not null,
    source_server sysname null,
    source_database sysname null,
    source_schema sysname null,
    source_table sysname null,
    source_column sysname null,
    is_identity_column bit null,
    is_part_of_unique_key bit null,
    is_updateable bit null,
    is_computed_column bit null,
    is_sparse_column_set bit null,
    ordinal_in_order_by_list smallint null,
    order_by_list_length smallint null,
    order_by_is_descending smallint null,
    tds_type_id int not null,
    tds_length int not null,
    tds_collation_id int null,
    tds_collation_sort_id tinyint null
);

테이블을 만들 때 해당 테이블에 일부 쿼리의 스키마를 저장할 수 있습니다.

declare @tsql nvarchar(max) = 'select top 0 * from sys.credentials';

insert #frs
exec sys.sp_describe_first_result_set @tsql;

select * from #frs;

문제의 예

다음 예제에서는 모든 예제에 대해 두 개의 테이블을 사용합니다. 예제 테이블을 만들려면 다음 문을 실행합니다.

CREATE TABLE dbo.t1 (a int NULL, b varchar(10) NULL, c nvarchar(10) NULL);  
CREATE TABLE dbo.t2 (a smallint NOT NULL, d varchar(20) NOT NULL, e int NOT NULL);  

서로 다른 열 수로 인한 오류

이 예제에서는 가능한 첫 번째 결과 집합의 열 수가 다릅니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a, b FROM t1;  
SELECT * FROM t; -- Ignored, not a possible first result set.'  
  

데이터 형식이 다르기 때문에 오류 발생

열 형식은 가능한 첫 번째 결과 집합마다 다릅니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a FROM t2;  

결과: 오류, 일치하지 않는 형식(intsmallint).

열 이름을 확인할 수 없습니다.

가능한 첫 번째 결과 집합의 열은 동일한 가변 길이 형식, null 허용 여부 및 열 이름에 대해 길이가 다릅니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d FROM t2; '  

결과: <알 수 없는 열 이름>varchar(20) NULL

별칭을 통해 동일해진 열 이름

이전 예와 동일하지만, 열 별칭을 통해 열 이름이 같아진 경우입니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d AS b FROM t2;'  

결과: b varchar(20)NULL

열 형식을 일치시킬 수 없기 때문에 오류 발생

열 형식은 가능한 첫 번째 결과 집합마다 다릅니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT c FROM t1;'  

결과: 오류, 일치하지 않는 형식(varchar(10)nvarchar(10))

결과 집합에서 오류를 반환할 수 있습니다.

첫 번째 결과 집합이 오류 또는 결과 집합입니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RAISERROR(''Some Error'', 16, 1);  
  
ELSE  
    SELECT a FROM t1;  
SELECT e FROM t2; -- Ignored, not a possible first result set.;'  

결과: intNULL

일부 코드 경로에서 아무 결과도 반환하지 않음

첫 번째 결과 집합이 Null 또는 결과 집합입니다.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RETURN;  
SELECT a FROM t1;'  

결과: intNULL

동적 SQL의 결과

첫 번째 결과 집합은 리터럴 문자열이므로 검색할 수 있는 동적 SQL입니다.

sp_describe_first_result_set @tsql =   
N'EXEC(N''SELECT a FROM t1'');'  

결과: INT NULL

동적 SQL의 결과 오류

첫 번째 결과 집합은 동적 SQL로 인해 정의되지 않습니다.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL); '  

결과: 오류입니다. 동적 SQL로 인해 결과를 검색할 수 없습니다.

사용자가 지정한 결과 집합

첫 번째 결과 집합은 사용자가 수동으로 지정합니다.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL)  
    WITH RESULT SETS(  
        (Column1 BIGINT NOT NULL)  
    ); '  

결과: Column1 bigint NOT NULL

모호한 결과 집합으로 인한 오류

이 예제에서는 user1이라는 다른 사용자가 열이 있는 기본 스키마 s1에 t1이라는 테이블이 있다고 가정합니다( int NOT NULL).

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT * FROM t1;'  
, @params = N'@p int'  

결과: 오류입니다. t1은 각각 서로 다른 수의 열을 가진 dbo.t1 또는 s1.t1일 수 있습니다.

모호한 결과 집합이 있는 경우에도 결과

이전 예제와 동일한 가정을 사용합니다.

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT a FROM t1;'  

결과: dbo.t1.a와 s1.t1.a 모두 int 형식과 Null 허용 여부가 다르기 때문에 int NULL입니다.

참고 항목

sp_describe_undeclared_parameters(Transact-SQL)
sys.dm_exec_describe_first_result_set(Transact-SQL)
sys.dm_exec_describe_first_result_set_for_object(Transact-SQL)