여러 결과 세트에 대한 dm_exec_describe_first_result_set_for_object


9

저장 프로 시저의 모든 결과 집합에 대한 메타 데이터를 반환하는 프로 시저가 있습니까?

와 같은 sys.dm_exec_describe_first_result_set_for_object것이지만 모든 결과 집합에 대해?

결국 데이터베이스의 모든 저장 프로 시저에있는 모든 결과 집합의 메타 데이터를 검색하려고합니다. 지금은 sys.dm_exec_describe_first_result_set_for_object설명 할 수없는 결과 집합에 대해서만 해결하겠습니다 . 즉, 두 번째, 세 번째 및 N 번째 결과 집합입니다.

SQLCLR을 사용하여 지금이 작업을 수행하십시오.

둘 이상의 결과 세트로 프로 시저 결과를 저장하는 방법
tSQLt-SQL Server 용 DB 단위 테스트-ResultSetFilter.cs


3
아니요, SQL Server에는 그러한 것이 없으므로 코드를 작성해야합니다 (많은 경우 추측해야 할 것입니다).
Aaron Bertrand

답변:


3

저장 프로 시저의 모든 결과 집합에 대한 메타 데이터를 반환하는 프로 시저가 있습니까?

아니요.

아니

첫 번째 결과 집합 이상에 액세스하는 순수한 T-SQL 방법은 없습니다. 심지어 OPENROWSETOPENQUERY는 같은 제한이 :

쿼리가 여러 결과 집합을 반환 할 수 있지만 OPEN (ROWSET | QUERY)는 첫 번째 결과 집합 만 반환합니다.

기록상, 나는이 제한에 대한 일반적인 기술적 이유가 있다고 말하거나 암시하지 않습니다. 난 그냥 제한이에 국한되지 않는다는 것을 지적하고 sp_describe_first_result_set, sys.dm_exec_describe_first_result_set하고 sys.dm_exec_describe_first_result_set_for_object.

정보 세트 (결과 세트 메타 데이터 및 결과까지)를 캡처하는 유일한 방법은 애플리케이션 코드를 통하는 것입니다. 먼저 사용하여 쿼리 / 저장 프로 시저 (들)을 실행 할 를 SqlCommand.ExecuteReader (CommandBehavior를)를 로모그래퍼 CommandBehavior를KeyInfo. 그런 다음 결과 세트의 메타 데이터를 사용하여 얻을 수 SqlDataReader.GetSchemaTable 방법, 그리고 호출 SqlDataReader.NextResult의 결과 집합을 순환 방법을. 그냥 응용 프로그램 코드를 통해이 작업을 수행하는 동적 SQL 및 임시 테이블로 작동하지의 제한이없는 동안, 그것은 것을 명심 않습니다실제로 SQL 코드를 실행하고 DML 문이 있고 데이터 변경없이 결과 집합 메타 데이터 만 원하는 경우 테스트중인 SQL을 BEGIN TRAN/ 에서 래핑해야합니다 ROLLBACK TRAN.

응용 프로그램 유형은 일반 Windows 앱, 콘솔 앱, 웹 앱 등이거나 SQLCLR 기능 / 저장 프로 시저 일 수도 있습니다.

SQLCLR을 통해이를 수행하는 것과 관련하여 여기에 설명 된대로 수행하는 저장 프로 시저가 이미 존재합니다. DB_DescribeResultSets 라고 하며 SQL # 라이브러리의 일부입니다 (저는 필자가 작성했으며 무료 버전은 있지만 DB_DescribeResultSets는 정식 버전에서만 사용 가능합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.