T-SQL은 저장 프로 시저의 SELECTed 값을 가져옵니다.


95

T-SQL에서는 다음이 허용됩니다.

DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

따라서 SELECT의 값을 가져와 변수에 넣을 수 있습니다 (분명히 스칼라 인 경우).

저장 프로 시저에 동일한 선택 논리를 넣는 경우 :

CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

이 저장 프로 시저의 출력을 가져 와서 변수에 넣을 수 있습니까?

다음과 같은 것 :

DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt

(위의 구문은 시도했기 때문에 허용되지 않는다는 것을 알고 있습니다!)

답변:


191

사용할 수있는 세 가지 방법이 있습니다. RETURN 값, OUTPUT 매개 변수 및 결과 세트

또한 패턴을 사용하는지 확인하십시오. SELECT @Variable=column FROM table ...

쿼리에서 반환 된 여러 행이있는 경우 @Variable에는 쿼리에서 반환 된 마지막 행의 값만 포함됩니다.


쿼리가 적어도 이름을 지정한 방식에 따라 int 필드를 반환하므로 RETURN VALUE . 이 트릭을 사용할 수 있습니다.

CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int

SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO

이제 다음과 같이 절차를 호출하십시오.

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue

RETURN은 단일 int 값만 반환 할 수 있고 null은 0으로 변환되므로 INT에서만 작동합니다.

OUTPUT PARAMETER
출력 매개 변수를 사용할 수 있습니다.

CREATE PROCEDURE GetMyInt
( @Param     int
 ,@OutValue  int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

이제 다음과 같이 절차를 호출하십시오.

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue 

출력 매개 변수는 하나의 값만 반환 할 수 있지만 모든 데이터 유형이 될 수 있습니다.

결과 집합에 대한 RESULT SET 절차는 다음과 같습니다.

CREATE PROCEDURE GetMyInt
( @Param     int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

다음과 같이 사용하십시오.

DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
    EXEC GetMyInt @Param
SELECT * FROM @ResultSet 

결과 집합에는 모든 데이터 유형의 많은 행과 열이있을 수 있습니다.


5
결과 집합 접근 방식에는 하나의 레코드 만 반환 되더라도이 테이블 / 삽입 사용이 필요합니다. 변수에 대한 바로 가기를 찾고 있었지만 하나가 없습니다.
goodeye 2014-06-09

여러 행 결과에서 '반환 값'및 '출력 매개 변수'접근 방식을 사용할 수 있습니까?
ji-ruh

@ 지 - RUH는 저장 프로 시저 하나 없음 일부 또는 모두 사용할 수있다 : 결과 집합 복귀 출력 매개 변수들, 및 / 또는 리턴 값
KM한다.

4

조합도 있으며 레코드 세트와 함께 반환 값을 사용할 수 있습니다.

-저장 절차-

CREATE PROCEDURE [TestProc]

AS
BEGIN

    DECLARE @Temp TABLE
    (
        [Name] VARCHAR(50)
    )

    INSERT INTO @Temp VALUES ('Mark') 
    INSERT INTO @Temp VALUES ('John') 
    INSERT INTO @Temp VALUES ('Jane') 
    INSERT INTO @Temp VALUES ('Mary') 

    -- Get recordset
    SELECT * FROM @Temp

    DECLARE @ReturnValue INT
    SELECT @ReturnValue = COUNT([Name]) FROM @Temp

    -- Return count
    RETURN @ReturnValue

END

-콜링 코드-

DECLARE @SelectedValue int
EXEC @SelectedValue = [TestProc] 

SELECT @SelectedValue

-결과-

여기에 이미지 설명 입력


이 결과를 PHP로 어떻게 얻습니까?
HagaHood

3

반환 값을 사용해야합니다.

DECLARE @SelectedValue int

CREATE PROCEDURE GetMyInt (@MyIntField int OUTPUT)
AS
SELECT @MyIntField = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

그런 다음 다음과 같이 부릅니다.

EXEC GetMyInt OUTPUT @SelectedValue

2

이렇게 해보십시오 :

EXEC @SelectedValue = GetMyInt

7
이것은 올바르지 않습니다. SELECT 문은 SPROC 내부에 지정되지 않는 한 SPROC의 반환 값이되지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.