2013-03-08 2 views
3

이것은 메타 질문입니다. 각 데이터베이스와 함께 제공되는 INFORMATION_SCHEMA을 사용하여 저장 프로 시저의 반환 값을 검색하는 방법은 무엇입니까? 함수를 사용하면 반환 값이 명시 적으로 선언되고 ROUTINES 아래의 INFORMATION_SCHEMA에 표시됩니다.SQL Server - 프로그래밍 방식으로 저장 프로 시저의 반환 값 검색

그러나 저장 프로 시저는 (항상 SP와 함수 사이의 구별로) 기괴한 회색 영역으로 보입니다. 그들은 공식적으로 더 '리턴 값을'이없는 것으로 보이지만, 아직 끝에서 당신은 SELECT 문 등을 실행할 수 있습니다 : 예를 들어

SELECT RowID = @RowID; 

; C#에서는 'RowID'열의 반환 값을 읽습니다. 이것은 저장 프로 시저가 실제로 함수처럼 T-SQL 코드의 컨텍스트가 아니더라도 실제로 값을 반환 할 수 있음을 분명히합니다.

정의 자체를 구문 분석 할 필요없이 이러한 값과 유형을 어떻게 발견합니까?

편집

이 검색하는 경우, 저장 프로 시저의 반환 값은 결과가을 설정 라는 데이터를 반환 할 수 있습니다 또한 정수 암시하지만.

+0

http://msdn.microsoft.com/en-us/library/ff878236.aspx –

+0

저장 프로 시저의 반환 값은 ... 반환 값입니다. 그들은 항상 정수 (암시 적으로 0)를 반환합니다. 그러나 그들은 또한 OUT 파라미터와 결과 세트를 가질 수 있습니다. –

+0

그래서 ROWID = @RowID를 선택할 때 이것은 반환 값이 아니지만 결과 집합은 무엇입니까? –

답변

5

저장 프로 시저는 정수를 반환합니다.

결과 집합을 반환하려면 SQL Server에 저장 프로 시저를 구문 분석하여이 정보를 제공하도록 요청할 수 있습니다.

SQL Server 2012에는 SET FMTONLY을 대체하는 sys.dm_exec_describe_first_result_set_for_object이 도입되었습니다.

CREATE PROC TestProc2 
AS 
SELECT object_id, name FROM sys.objects ; 
SELECT name, schema_id, create_date FROM sys.objects ; 
GO 

SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ; 
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ; 
GO 

또한 그 중 하나가 OUT 표시되어 있는지 확인하기 위해, 저장 프로 시저의 매개 변수를 조사 할 수 있습니다. INFORMATION_SCHEMA.PARAMETERS은 각 매개 변수의 모드를 제공합니다.

세 가지를 모두 조합하면 원하는 것을 많이 제공해야합니다.

+1

2008 R2 또는 2008에서 사용할 수있는 것은 무엇입니까? –

+3

SET FMTONLY ON, 사용하기 전에 설명서를 읽으십시오. 그것은 몇 가지 문제가 있습니다. –

+0

이것은 주로 서비스 용 입력 및 출력 객체를 생성하기위한 것입니다. 중재 된 프로세스이므로 완벽하게 작동 할 필요가 없으며 반환 유형을 수동으로 다시 작성하지 않아도됩니다. –

관련 문제