sp_describe_first_result_set(Transact-SQL)sp_describe_first_result_set (Transact-SQL)

이 항목은 다음에 적용됩니다.예SQL Server(2012부터 시작)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

가능한 첫 번째 결과 집합에 대 한 메타 데이터를 반환 합니다.는 Transact-SQLTransact-SQL 일괄 처리 합니다.Returns the metadata for the first possible result set of the Transact-SQLTransact-SQL batch. 일괄 처리에서 아무 결과도 반환되지 않은 경우 빈 결과 집합을 반환합니다.Returns an empty result set if the batch returns no results. 오류가 발생 된 데이터베이스 엔진Database Engine 정적 분석을 수행 하 여 실행 될 첫 번째 쿼리에 대 한 메타 데이터를 확인할 수 없습니다.Raises an error if the 데이터베이스 엔진Database Engine cannot determine the metadata for the first query that will be executed by performing a static analysis. 동적 관리 뷰 sys.dm_exec_describe_first_result_set (TRANSACT-SQL) 같은 정보를 반환 합니다.The dynamic management view sys.dm_exec_describe_first_result_set (Transact-SQL) returns the same information.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax


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

인수Arguments

[ @tsql = ] 'Transact SQL_batch'[ @tsql = ] 'Transact-SQL_batch'
하나 이상의 Transact-SQLTransact-SQL 문입니다.One or more Transact-SQLTransact-SQL statements. Transact SQL_batchnvarchar (n) 또는 nvarchar (max) 합니다.Transact-SQL_batch may be nvarchar(n) or nvarchar(max).

[ @params = ] N'매개 변수'[ @params = ] N'parameters'
@params 에 대 한 매개 변수에 대 한 선언 문자열을 제공 된 Transact-SQLTransact-SQL 일괄 처리는 sp_executesql과 비슷하게를 합니다.@params provides a declaration string for parameters for the Transact-SQLTransact-SQL batch, which is similar to sp_executesql. 매개 변수가 필요할 수 nvarchar (n) 또는 nvarchar (max) 합니다.Parameters may be nvarchar(n) or nvarchar(max).

하나의 문자열에 포함 된 모든 매개 변수 정의 포함 하는 Transact-SQLTransact-SQL _batch합니다.Is one string that contains the definitions of all parameters that have been embedded in the Transact-SQLTransact-SQL_batch. 문자열은 유니코드 상수 또는 유니코드 변수여야 합니다.The string must be either a Unicode constant or a Unicode variable. 각 매개 변수의 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다.Each parameter definition consists of a parameter name and a data type. n 은 추가 매개 변수 정의 나타내는 자리 표시자입니다.n is a placeholder that indicates additional parameter definitions. 문에 지정 된 모든 매개 변수에서 정의 되어야 합니다 @params합니다.Every parameter specified in the statement must be defined in @params. 경우는 Transact-SQLTransact-SQL 문 또는 문의 일괄 처리, 매개 변수가 없으면 @params 필요 하지 않습니다.If the Transact-SQLTransact-SQL statement or batch in the statement does not contain parameters, @params is not required. NULL이 이 매개 변수의 기본값입니다.NULL is the default value for this parameter.

[ @browse_information_mode = ] tinyint[ @browse_information_mode = ] tinyint
추가 키 열과 원본 테이블 정보를 반환할지 여부를 지정합니다.Specifies if additional key columns and source table information are returned. 1로 설정되면 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 각 쿼리가 분석됩니다.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. 추가 키 열과 원본 테이블 정보가 반환됩니다.Additional key columns and source table information are returned.

  • 0으로 설정되면 정보가 반환되지 않습니다.If set to 0, no information is returned.

  • 1로 설정되면 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 각 쿼리가 분석됩니다.If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. 그러면 원본 열 정보로 기본 테이블 이름을 반환합니다.This will return base table names as the source column information.

  • 2로 설정되면 쿼리에 커서 준비 또는 실행에 사용되는 것처럼 각 쿼리가 분석됩니다.If set to 2, each query is analyzed as if it would be used in preparing or executing a cursor. 그러면 원본 열 정보로 보기 이름을 반환합니다.This will return view names as source column information.

반환 코드 값Return Code Values

sp_describe_first_result_set 항상 상태를 성공 하면 0 반환 합니다.sp_describe_first_result_set always returns a status of zero on success. 프로시저는 오류가 발생 하는 경우 프로시저가 RPC로 호출 된 sys.dm_exec_describe_first_result_set의 error_type 열에 설명 된 오류 형식으로 반환 상태가 채워집니다.If the procedure throws an error and the procedure is called as an RPC, return status is populated by the type of error described in the error_type column of sys.dm_exec_describe_first_result_set. Transact-SQLTransact-SQL에서 프로시저를 호출한 경우 반환 값은 오류가 발생한 경우에도 항상 0입니다.If the procedure is called from Transact-SQLTransact-SQL, the return value is always zero, even when there is an error.

결과 집합Result Sets

이 공통 메타데이터는 결과 메타데이터의 각 열에 대한 하나의 행이 포함된 결과 집합으로 반환됩니다.This common metadata is returned as a result set with one row for each column in the results metadata. 각 행은 다음 섹션에 설명된 형식으로 열의 유형과 Null 허용 여부를 설명합니다.Each row describes the type and nullability of the column in the format described in the following section. 모든 제어 경로에 대해 첫 번째 문이 없을 경우 행이 0개인 결과 집합이 반환됩니다.If the first statement does not exist for every control path, a result set with zero rows is returned.

열 이름Column name 데이터 형식Data type DescriptionDescription
is_hiddenis_hidden 비트 NOT NULLbit NOT NULL 해당 열이 정보 검색을 목적으로 추가되어 실제로 결과 집합에 나타나지 않는 별도의 열임을 나타냅니다.Indicates that the column is an extra column added for browsing information purposes and that it does not actually appear in the result set.
column_ordinalcolumn_ordinal int NOT NULLint NOT NULL 결과 집합에서 열의 서수 위치를 포함합니다.Contains the ordinal position of the column in the result set. 첫째 열의 위치가 1로 지정됩니다.The first column’s position will be specified as 1.
namename sysname NULLsysname NULL 이름을 확인할 수 있으면 열 이름을 포함하고Contains the name of the column if a name can be determined. 그렇지 않으면 NULL을 포함합니다.Otherwise, it will contain NULL.
is_nullableis_nullable 비트 NOT NULLbit NOT NULL 열이 NULL을 허용하는 경우 1, 열이 NULL을 허용하지 않는 경우 0, 열이 NULL을 허용하는지 확인할 수 없는 경우 1을 포함합니다.Contains the value 1 if the column allows NULLs, 0 if the column does not allow NULLs, and 1 if it cannot be determined if the column allows NULLs.
system_type_idsystem_type_id int NOT NULLint NOT NULL Sys.types에 지정 된 대로 열 데이터 형식의 system_type_id를 포함합니다.Contains the system_type_id of the data type of the column as specified in sys.types. CLR 형식의 경우 system_type_name 열에서 NULL을 반환해도 이 열은 값 240을 반환합니다.For CLR types, even though the system_type_name column will return NULL, this column will return the value 240.
system_type_namesystem_type_name nvarchar(256) NULLnvarchar(256) NULL 열의 데이터 형식에 지정한 이름 및 인수(length, precision, scale 등)를 포함합니다.Contains the name and arguments (such as length, precision, scale), specified for the data type of the column. 데이터 형식이 사용자 정의 별칭 형식인 경우 기본 시스템 형식이 여기에 지정됩니다.If the data type is a user-defined alias type, the underlying system type is specified here. 데이터 형식이 CLR 사용자 정의 형식인 경우 이 열에 NULL이 반환됩니다.If it is a CLR user-defined type, NULL is returned in this column.
max_lengthmax_length NULL이 아닌 Smallintsmallint NOT NULL 열의 최대 길이(바이트)입니다.Maximum length (in bytes) of the column.

-1 = 열 데이터 형식이 varchar (max), nvarchar (max), varbinary (max), 또는 xml합니다.-1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml.

에 대 한 텍스트 열은 max_length 값은 16 또는 값 설정 됩니다 sp_tableoption 'text in row' 합니다.For text columns, the max_length value will be 16 or the value set by sp_tableoption 'text in row'.
전체 자릿수precision tinyint NOT NULLtinyint NOT NULL 숫자 기반일 경우 열의 전체 자릿수이고Precision of the column if numeric-based. 그렇지 않으면 0을 반환합니다.Otherwise returns 0.
소수 자릿수scale tinyint NOT NULLtinyint NOT NULL 숫자 기반일 경우 열의 소수 자릿수이고Scale of column if numeric-based. 그렇지 않으면 0을 반환합니다.Otherwise returns 0.
collation_namecollation_name sysname NULLsysname NULL 문자 기반일 경우 열의 데이터 정렬 이름이고Name of the collation of the column if character-based. 그렇지 않으면 NULL을 반환합니다.Otherwise returns NULL.
user_type_iduser_type_id int NULLint NULL CLR 및 별칭 형식의 경우 sys.types에 지정된 대로 열 데이터 형식의 user_type_id를 포함합니다.For CLR and alias types, contains the user_type_id of the data type of the column as specified in sys.types. 그렇지 않으면 NULL입니다.Otherwise is NULL.
user_type_databaseuser_type_database sysname NULLsysname NULL CLR 및 별칭 형식의 경우 해당 형식이 정의된 데이터베이스의 이름을 포함합니다.For CLR and alias types, contains the name of the database in which the type is defined. 그렇지 않으면 NULL입니다.Otherwise is NULL.
user_type_schemauser_type_schema sysname NULLsysname NULL CLR 및 별칭 형식의 경우 해당 형식이 정의된 스키마의 이름을 포함합니다.For CLR and alias types, contains the name of the schema in which the type is defined. 그렇지 않으면 NULL입니다.Otherwise is NULL.
user_type_nameuser_type_name sysname NULLsysname NULL CLR 및 별칭 형식의 경우 형식 이름입니다.For CLR and alias types, contains the name of the type. 그렇지 않으면 NULL입니다.Otherwise is NULL.
assembly_qualified_type_nameassembly_qualified_type_name nvarchar(4000)nvarchar(4000) CLR 형식의 경우 형식을 정의하는 어셈블리 및 클래스 이름을 반환합니다.For CLR types, returns the name of the assembly and class defining the type. 그렇지 않으면 NULL입니다.Otherwise is NULL.
xml_collection_idxml_collection_id int NULLint NULL sys.columns에 지정한 대로 열 데이터 형식의 xml_collection_id를 포함합니다.Contains the xml_collection_id of the data type of the column as specified in sys.columns. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_databasexml_collection_database sysname NULLsysname NULL 이 형식과 연결된 XML 스키마 컬렉션이 정의된 데이터베이스를 포함합니다.Contains the database in which the XML schema collection associated with this type is defined. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_schemaxml_collection_schema sysname NULLsysname NULL 이 형식과 연결된 XML 스키마 컬렉션이 정의된 스키마를 포함합니다.Contains the schema in which the XML schema collection associated with this type is defined. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_namexml_collection_name sysname NULLsysname NULL 이 형식과 연결된 XML 스키마 컬렉션 이름을 포함합니다.Contains the name of the XML schema collection associated with this type. 반환된 형식이 XML 스키마 컬렉션과 연결되지 않은 경우 이 열은 NULL을 반환합니다.This column will return NULL if the type returned is not associated with an XML schema collection.
is_xml_documentis_xml_document 비트 NOT NULLbit NOT NULL 반환된 데이터 형식이 XML이고 해당 형식이 XML 조각이 아닌 완전한 XML 문서(루트 노드 포함)라고 보장될 경우 1을 반환합니다.Returns 1 if the returned data type is XML and that type is guaranteed to be a complete XML document (including a root node), as opposed to an XML fragment). 그렇지 않으면 0을 반환합니다.Otherwise returns 0.
is_case_sensitiveis_case_sensitive 비트 NOT NULLbit NOT NULL 열이 대/소문자를 구분하는 문자열 형식인 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is a case-sensitive string type and 0 if it is not.
is_fixed_length_clr_typeis_fixed_length_clr_type 비트 NOT NULLbit NOT NULL 열이 고정 길이 CLR 형식인 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is a fixed-length CLR type and 0 if it is not.
source_serversource_server sysnamesysname 이 결과에서 열이 반환한 원본 서버의 이름입니다(원본이 원격 서버인 경우).Name of the originating server returned by the column in this result (if it originates from a remote server). Sys.servers에 표시 된 대로 이름이 지정 됩니다.The name is given as it appears in sys.servers. 열의 원본이 로컬 서버이거나 원본 서버를 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if the column originates on the local server or if it cannot be determined which server it originates on. 정보 검색을 요청할 경우에만 채워집니다.Is only populated if browsing information is requested.
source_databasesource_database sysnamesysname 이 결과에서 열이 반환한 원본 데이터베이스 이름입니다.Name of the originating database returned by the column in this result. 데이터베이스를 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if the database cannot be determined. 정보 검색을 요청할 경우에만 채워집니다.Is only populated if browsing information is requested.
source_schemasource_schema sysnamesysname 이 결과에서 열이 반환한 원본 스키마 이름입니다.Name of the originating schema returned by the column in this result. 스키마를 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if the schema cannot be determined. 정보 검색을 요청할 경우에만 채워집니다.Is only populated if browsing information is requested.
source_tablesource_table sysnamesysname 이 결과에서 열이 반환한 원본 테이블 이름입니다.Name of the originating table returned by the column in this result. 테이블을 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if the table cannot be determined. 정보 검색을 요청할 경우에만 채워집니다.Is only populated if browsing information is requested.
source_columnsource_column sysnamesysname 결과 열에서 반환한 원본 열의 이름입니다.Name of the originating column returned by the result column. 열을 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if the column cannot be determined. 정보 검색을 요청할 경우에만 채워집니다.Is only populated if browsing information is requested.
is_identity_columnis_identity_column NULL 비트bit NULL 열이 ID 열일 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is an identity column and 0 if not. 열이 ID 열인지 확인할 수 없으면 NULL을 반환합니다.Returns NULL if it cannot be determined that the column is an identity column.
is_part_of_unique_keyis_part_of_unique_key NULL 비트bit NULL 열이 고유 인덱스의 일부일 경우(unique 및 primary 제약 조건 포함) 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is part of a unique index (including unique and primary constraint) and 0 if not. 열이 고유 인덱스의 일부인지 확인할 수 없으면 NULL을 반환합니다.Returns NULL if it cannot be determined that the column is part of a unique index. 정보 검색을 요청할 경우에만 채워집니다.Only populated if browsing information is requested.
is_updateableis_updateable NULL 비트bit NULL 열이 업데이트 가능할 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is updateable and 0 if not. 열이 업데이트 가능한지 확인할 수 없으면 NULL을 반환합니다.Returns NULL if it cannot be determined that the column is updateable.
is_computed_columnis_computed_column NULL 비트bit NULL 열이 계산 열일 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is a computed column and 0 if not. 열이 계산 열인지 확인할 수 없으면 NULL을 반환합니다.Returns NULL if it cannot be determined that the column is a computed column.
is_sparse_column_setis_sparse_column_set NULL 비트bit NULL 열이 스파스 열일 경우 1을 반환하고 그렇지 않으면 0을 반환합니다.Returns 1 if the column is a sparse column and 0 if not. 열이 스파스 열 집합의 일부인지 확인할 수 없으면 NULL을 반환합니다.Returns NULL if it cannot be determined that the column is part of a sparse column set.
ordinal_in_order_by_listordinal_in_order_by_list smallint NULLsmallint NULL ORDER BY 목록에서 이 열의 위치입니다.Position of this column in ORDER BY list. 열이 ORDER BY 목록에 없거나 ORDER BY 목록을 고유하게 확인할 수 없을 경우 NULL을 반환합니다.Returns NULL if the column does not appear in the ORDER BY list or if the ORDER BY list cannot be uniquely determined.
order_by_list_lengthorder_by_list_length smallint NULLsmallint NULL ORDER BY 목록의 길이입니다.Length of the ORDER BY list. ORDER BY 목록이 없거나 ORDER BY 목록을 고유하게 확인할 수 없는 경우 NULL을 반환합니다.Returns NULL if there is no ORDER BY list or if the ORDER BY list cannot be uniquely determined. 이 값은 동일 하 게 반환 하는 모든 행에 대 한 참고 sp_describe_first_result_set 합니다.Note that this value will be the same for all rows returned by sp_describe_first_result_set.
order_by_is_descendingorder_by_is_descending smallint NULLsmallint NULL Ordinal_in_order_by_list가 NULL이 아닐 경우는 order_by_is_descending 열이이 열에 대 한 ORDER BY 절의 방향을 보고 합니다.If the ordinal_in_order_by_list is not NULL, the order_by_is_descending column reports the direction of the ORDER BY clause for this column. 그렇지 않으면 NULL을 보고합니다.Otherwise it reports NULL.
tds_type_idtds_type_id int NOT NULLint NOT NULL 내부적으로만 사용할 수 있습니다.For internal use.
tds_lengthtds_length int NOT NULLint NOT NULL 내부적으로만 사용할 수 있습니다.For internal use.
tds_collation_idtds_collation_id int NULLint NULL 내부적으로만 사용할 수 있습니다.For internal use.
tds_collation_sort_idtds_collation_sort_id tinyint NULLtinyint NULL 내부적으로만 사용할 수 있습니다.For internal use.

주의Remarks

sp_describe_first_result_set 프로시저 (가상)에 대 한 첫 번째 결과 집합 메타 데이터를 반환 하는 경우 일괄 처리 A 한 경우 해당 일괄 처리 (A) 후 해당 호스트가 실행 보장이 다음 일괄 처리 합니다 (1) 최적화 시간 오류, (2)를 발생 시킵니다. 발생 시키는 런타임 오류 (3) 아무 결과도에서 설명 하는 동일한 메타 데이터가 포함 된 첫 번째 결과 집합을 설정 하거나 (4) 반환 sp_describe_first_result_set합니다.sp_describe_first_result_set guarantees that if the procedure returns the first result-set metadata for (a hypothetical) batch A and if that batch (A) is subsequently executed then the batch will either (1) raises an optimization-time error, (2) raises a run-time error, (3) returns no result set, or (4) returns a first result set with the same metadata described by sp_describe_first_result_set.

이름, Null 허용 여부 및 데이터 형식이 다를 수 있습니다.The name, nullability, and data type can differ. 경우 sp_describe_first_result_set 반환 보증은 빈 결과 집합은 일괄 처리 실행 아니요 결과 집합을 반환 합니다.If sp_describe_first_result_set returns an empty result set, the guarantee is that the batch execution will return no-result sets.

이 보장은 서버의 관련 스키마 변경 사항이 없는 것으로 가정합니다.This guarantee presumes there are are no relevant schema changes on the server. 서버의 관련 스키마 변경 내용을 임시 테이블 만들기를 포함 하지 않거나 테이블 변수는 일괄 처리 시간 사이에서는 sp_describe_first_result_set 라고 하는 동안 결과 집합이 반환 되는 시간 2. 일괄 처리에서 변경한 스키마를 포함 하 여 실행Relevant schema changes on the server do not include creating a temporary tables or table variables in the batch A between the time that sp_describe_first_result_set is called and the time that the result set is returned during execution, including schema changes made by batch B.

sp_describe_first_result_set 다음과 같은 경우에 오류를 반환 합니다.sp_describe_first_result_set returns an error in any of the following cases.

  • 하는 경우 입력 @tsql 유효 하지 않거나 Transact-SQLTransact-SQL 일괄 처리 합니다.If the input @tsql is not a valid Transact-SQLTransact-SQL batch. 유효성을 구문 분석 하 고 분석 하 여 확인할는 Transact-SQLTransact-SQL 일괄 처리 합니다.Validity is determined by parsing and analyzing the Transact-SQLTransact-SQL batch. 쿼리 최적화 중 또는 실행 하는 동안 일괄 처리에 의해 발생 한 오류를 결정할 때 고려 되지 않습니다 여부는 Transact-SQLTransact-SQL 일괄 처리는 유효 합니다.Any errors caused by the batch during query optimization or during execution are not considered when determining whether the Transact-SQLTransact-SQL batch is valid.

  • 경우 @params NULL이 아닌 문자열을 포함 하는 문자열을 포함 하는 경우 선언 하는 매개 변수가 여러 번 또는 매개 변수에 대해 구문상 유효한 선언 문자열이 아닙니다.If @params is not NULL and contains a string that is not a syntactically valid declaration string for parameters, or if it contains a string that declares any parameter more than one time.

  • 하는 경우 입력 Transact-SQLTransact-SQL 일괄 처리에서 선언 된 매개 변수 이름이 같은 지역 변수를 선언 @params합니다.If the input Transact-SQLTransact-SQL batch declares a local variable of the same name as a parameter declared in @params.

  • 해당 문에서 임시 테이블을 사용하는 경우If the statement uses a temporary table.

  • 쿼리에 다음으로 쿼리되는 영구 테이블 생성이 포함되는 경우The query includes the creation of a permanent table that is then queried.

    다른 모든 확인이 성공한 경우에는 입력 일괄 처리 내에서 가능한 모든 제어 흐름 경로가 고려됩니다.If all other checks succeed, all possible control flow paths inside the input batch are considered. 이 고려 모든 제어 흐름 문 (GOTO, IF/ELSE, WHILE 및 Transact-SQLTransact-SQL TRY/CATCH 블록) 동적 모든 절차 뿐만 아니라 Transact-SQLTransact-SQL 일괄 처리 또는 트리거를 발생 시키는 DDL 문에 EXEC 문에 의해 입력된 일괄 처리에서 호출 DDL 트리거를 발생 또는 발생으로 인해 대상 테이블에서 또는 외래 키 제약 조건에서 연계 동작으로 인해 수정 하는 테이블에서 발생 하는 DML 문입니다.This takes into account all control flow statements (GOTO, IF/ELSE, WHILE, and Transact-SQLTransact-SQL TRY/CATCH blocks) as well as any procedures, dynamic Transact-SQLTransact-SQL batches, or triggers invoked from the input batch by an EXEC statement, a DDL statement that causes DDL triggers to be fired, or a DML statement that causes triggers to be fired on a target table or on a table that is modified because of cascading action on a foreign key constraint. 가능한 대부분의 제어 경로에서 특정 시점에 알고리즘이 중지됩니다.In the case of many possible control paths, at some point an algorithm stops.

    각 제어 흐름 경로 대 한 첫 번째 문 (있는 경우)를 반환 하는 결과 집합을 따라 사용자가 sp_describe_first_result_set합니다.For each control flow path, the first statement (if any) that returns a result set is determined by sp_describe_first_result_set.

    일괄 처리에서 가능한 첫 번째 문이 여러 개 발견된 경우 해당 결과는 열 수, 열 이름, Null 허용 여부 및 데이터 형식이 다를 수 있습니다.When multiple possible first statements are found in a batch, their results can differ in number of columns, column name, nullability, and data type. 이러한 차이점이 처리되는 방식은 다음과 같습니다.How these differences are handled is described in more detail here:

  • 열 수가 다른 경우 오류가 발생하고 아무 결과도 반환되지 않습니다.If the number of columns differs, an error is thrown and no result is returned.

  • 열 이름이 다른 경우 반환되는 열 이름이 NULL로 설정됩니다.If the column name differs, the column name returned is set to NULL.

  • Null 허용 여부가 다른 경우 반환되는 Null 허용 여부가 NULL을 허용합니다.It the nullability differs, the nullability returned will allow NULLs.

  • 데이터 형식이 다른 경우 다음 조합 외에는 오류가 발생하고 아무 결과도 반환되지 않습니다.If the data type differs, an error will be thrown and no result is returned except for the following cases:

    • varchar(a)varchar(a') 위치는 ' >는 합니다.varchar(a) to varchar(a') where a' > a.

    • varchar(a)varchar (max)varchar(a) to varchar(max)

    • nvarchar(a)nvarchar(a') 위치는 ' >는 합니다.nvarchar(a) to nvarchar(a') where a' > a.

    • nvarchar(a)nvarchar (max)nvarchar(a) to nvarchar(max)

    • varbinary(a)varbinary(a') 위치는 ' >는 합니다.varbinary(a) to varbinary(a') where a' > a.

    • varbinary(a)varbinary (max)varbinary(a) to varbinary(max)

    sp_describe_first_result_set 간접 재귀를 지원 하지 않습니다.sp_describe_first_result_set does not support indirect recursion.

PermissionsPermissions

실행할 수 있는 권한이 필요는 @tsql 인수입니다.Requires permission to execute the @tsql argument.

Examples

일반적인 예Typical Examples

1.A. 간단한 예Simple Example

다음 예에서는 단일 쿼리에서 반환되는 결과 집합을 설명합니다.The following example describes the result set returned from a single query.

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

다음 예에서는 매개 변수가 포함된 단일 쿼리에서 반환되는 결과 집합을 보여 줍니다.The following example shows the result set returned from a single query that contains a parameter.

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

2.B. 찾아보기 모드 예제Browse Mode Examples

다음 세 가지 예제는 여러 가지 탐색 정보 모드 간의 주요 차이점을 보여줍니다.The following three examples illustrate the key difference between the different browse information modes. 쿼리 결과에는 관련된 열만 포함되었습니다.Only the relevant columns have been included in the query results.

정보가 없음을 나타내는 0을 반환하는 예제가 반환됩니다.Example using 0 indicating no information is returned.

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;  

결과 집합은 다음과 같습니다.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 1.1 b3b3 NULLNULL NULLNULL NULLNULL NULLNULL

1을 사용하는 예제는 쿼리에 FOR BROWSE 옵션이 포함된 것처럼 정보를 반환합니다.Example using 1 indicating it returns information as if it includes a FOR BROWSE option on the query.

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

결과 집합은 다음과 같습니다.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 1.1 b3b3 dbodbo tt B1B1 00
1.1 22 aa dbodbo tt aa 1.1

마치 커서를 준비하는 것처럼 분석됨을 나타내는 2를 사용하는 예제.Example using 2 indicating analyzed as if you are preparing a cursor.

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

결과 집합은 다음과 같습니다.Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal namename source_schemasource_schema source_tablesource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 1.1 B3B3 dbodbo vv B2B2 00
1.1 22 ROWSTATROWSTAT NULLNULL NULLNULL NULLNULL 00

문제 예Examples of problems

다음 예에서는 모두 두 개의 테이블을 사용합니다.The following examples use two tables for all examples. 예제 테이블을 만들려면 다음 문을 실행합니다.Execute the following statements to create the example tables.

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);  

서로 다른 열 수로 인한 오류Error because the number of columns differ

이 예에서는 가능한 첫 번째 결과 집합의 열 수가 서로 다릅니다.Number of columns in possible first result sets differ in this example.

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.'  

서로 다른 데이터 형식으로 인한 오류Error because the data types differ

여러 개의 가능한 첫 번째 결과 집합에서 열 형식이 서로 다릅니다.Columns types differ in different possible first result sets.

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

결과: 오류, 일치 하지 않는 형식 (int 비교 smallint).Result: Error, mismatching types (int vs. smallint).

열 이름을 확인할 수 없는 경우Column name cannot be determined

가능한 첫 번째 결과 집합의 열이 동일한 가변 길이 형식의 길이, Null 허용 여부 및 열 이름이 서로 다릅니다.Columns in possible first result sets differ by length for same variable length type, nullability, and column names:

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

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

별칭을 통해 동일해진 열 이름Column name forced to be identical through aliasing

이전 예와 동일하지만, 열 별칭을 통해 열 이름이 같아진 경우입니다.Same as previous, but columns have the same name through column aliasing.

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

결과: b varchar (20) NULLResult: b varchar(20)NULL

일치하지 않는 열 형식으로 인한 오류Error because column types cannot be matched

여러 개의 가능한 첫 번째 결과 집합에서 열 형식이 서로 다릅니다.The columns types differ in different possible first result sets.

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

결과: 오류, 일치 하지 않는 형식 (varchar (10) 비교 nvarchar (10)).Result: Error, mismatching types (varchar(10) vs. nvarchar(10)).

결과 집합이 오류를 반환할 수 있음Result set can return an error

첫 번째 결과 집합이 오류 또는 결과 집합입니다.First result set is either error or result set.

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.;'  

결과:는 intNULLResult: a intNULL

일부 코드 경로에서 아무 결과도 반환하지 않음Some code paths return no results

첫 번째 결과 집합이 Null 또는 결과 집합입니다.First result set is either null or a result set.

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

결과:는 intNULLResult: a intNULL

동적 SQL의 결과Result from dynamic SQL

첫 번째 결과 집합이 리터럴 문자열이기 때문에 검색 가능한 동적 SQL입니다.First result set is dynamic SQL that is discoverable because it is a literal string.

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

결과:는 INT NULLResult: a INT NULL

동적 SQL로 인한 결과 오류Result failure from dynamic SQL

첫 번째 결과 집합이 동적 SQL로 인해 정의되지 않습니다.First result set is undefined because of dynamic 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); '  

결과: 오류입니다.Result: Error. 동적 SQL로 인해 결과를 검색할 수 없습니다.Result is not discoverable because of the dynamic SQL.

사용자가 지정한 결과 집합Result set specified by user

첫 번째 결과 집합을 사용자가 수동으로 지정합니다.First result set is specified manually by user.

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 NULLResult: Column1 bigint NOT NULL

불확실한 결과 집합으로 인한 오류Error caused by a ambiguous result set

이 예제에서는 user1 라는 다른 사용자가 열이 있는 기본 스키마 s 1에서 t1 테이블이 있는 가정 (한 int NOT NULL).This example assumes that another user named user1 has a table named t1 in the default schema s1 with columns (a int NOT NULL).

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

결과: 오류입니다.Result: Error. 다른 dbo.t1 또는 열 수가 서로 다르므로 각각 s1.t1 t1 수 있습니다.t1 can be either dbo.t1 or s1.t1, each with a different number of columns.

불확실한 결과 집합이 포함된 결과Result even with ambiguous result set

이전 예와 동일한 가정을 사용합니다.Use the same assumptions as the previous example.

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

결과:는 int NULL dbo.t1.a와 s1.t1.a 형식을 가지 int null 허용 여부가 있습니다.Result: a int NULL because both dbo.t1.a and s1.t1.a have type int and different nullability.

관련 항목:See Also

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