2011-03-08 5 views
1

함수에서 하나 이상의 변수를 반환하지만 항상 있어야하는 함수의 경우 테이블 반환 함수를 만들 수 있음을 알고 있습니다. 하나의 레코드 만 반환하면 과도한 것으로 보입니다. 대신 모든 값을 변수로 반환하는 것이 좋습니다. OUTPUT 절을 사용하여이 작업을 수행 할 수 있습니다. 당신이 저에게 가능하다는 것을 알려 주면 감사하겠습니다. 그렇다면 그것에 대해 어떻게 안내할까요? 이것을 위해 msdn에서 직접적인 방법을 찾지 못했습니다.OUTPUT을 사용하여 SQL Server2005의 함수에서 둘 이상의 변수를 반환하는 방법

감사합니다.

+0

왜 결과 집합을 반환하는 저장 프로 시저를 사용하지 않습니까? –

답변

2

귀하의 요구 사항을 올바르게 이해하는 경우 OUTPUT 절 대신에 OUTPUT 매개 변수가 필요합니다.

예 (이 단지 그러나 저장 프로 시저에 적용)

CREATE PROC outputdemo 
@name varchar(50), 
@status int OUTPUT, 
@type nchar(3) OUTPUT 
AS 
SELECT @status = status, @type = type 
FROM master..spt_values 
WHERE [email protected] /*<--Pretend this is the PK*/ 

GO 

DECLARE @status int, @type nchar(3) 
EXEC outputdemo 'rpc', @status OUTPUT, @type OUTPUT 
SELECT @status AS status, @type as type 

당신이 그때 하나 개 이상의 값을 반환 생각할 수있는 유일한 방법은 XML을 통해 것 스칼라 UDF에 대해 명시 적으로 요청하는 경우, 또는 사용자 정의 UDT 또는 다른 유사한 메커니즘.

+0

감사합니다. 이것은 정확히 내가 필요한 것이지만 기능을 위해 ... 그럼에도 불구하고, 그것이 기능에서 수행 될 수 없다는 것을 알려 주셔서 감사합니다. 하나의 레코드를 반환하는 테이블 반환 함수를 사용했습니다. XML도 좋은 선택이지만 내 호출 프로 시저의 Xqueries는 느려지 게하고 전체 목적을 무너 뜨릴 것입니다. 다시 한번 감사드립니다. – Tintin

0

불행히도 함수에 출력 매개 변수를 사용할 수 없습니다. 단일 스.라나 단일 테이블 만 리턴 할 수 있습니다.

그러나 절차에 대한 출력 매개 변수가있을 수 있습니다.

0
create procedure GetMultipleValues 
(
    @ValueOne int out,   -- decorate parameters with out 
    @ValueTwo nvarchar(100) out 
) 
as 
set @ValueOne = 1 
set @ValueTwo = N'Hello, world!' 
return 
go 



declare @MyInteger int 
declare @MyString nvarchar(100) 

exec GetMultipleValues @MyInteger out, @MyString out -- decorate arguments with out 

print @MyInteger -- 1 
print @MyString -- Hello, world! 
+0

감사합니다. 도움이되었습니다. – Tintin

관련 문제