programing

SQL 변수에 exec 결과를 할당하는 방법

newstyles 2023. 4. 14. 21:24

SQL 변수에 exec 결과를 할당하는 방법

SQL 변수에 exec 호출 결과를 할당하려면 어떻게 해야 합니까?저장된 프로시저가 있습니다.up_GetBusinessDay단일 날짜를 반환합니다.

다음과 같은 작업을 수행할 수 있습니다.

exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

항상 반환값을 사용하여 에러 상태를 되돌립니다.1개의 값을 반환할 필요가 있는 경우 출력 파라미터를 사용합니다.

샘플 저장 프로시저, OUTPUT 파라미터:

CREATE PROCEDURE YourStoredProcedure 
(
    @Param1    int
   ,@Param2    varchar(5)
   ,@Param3    datetime OUTPUT
)
AS
IF ISNULL(@Param1,0)>5
BEGIN
    SET @Param3=GETDATE()
END
ELSE
BEGIN
    SET @Param3='1/1/2010'
END
RETURN 0
GO

OUTPUT 파라미터를 사용하여 저장 프로시저를 호출합니다.

DECLARE @OutputParameter  datetime
       ,@ReturnValue      int

EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)

출력:

0
2010-01-01 00:00:00.000

이것은 단순히 정수를 반환하는 경우에 유효합니다.

DECLARE @ResultForPos INT 
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
declare @EventId int

CREATE TABLE #EventId (EventId int)

insert into #EventId exec rptInputEventId

set @EventId = (select * from #EventId)

drop table #EventId 

매뉴얼(SQL-Server를 사용하는 경우)에서 다음 절차를 수행합니다.

USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO

그래, 그래야지.

저도 같은 질문이 있었어요.여기에는 좋은 답이 있지만 테이블 값 함수를 만들기로 했습니다.테이블(또는 스칼라) 값 함수를 사용하면 저장된 proc를 변경할 필요가 없습니다.테이블 값 함수에서 선택했을 뿐입니다.파라미터(MyParameter는 옵션)는 주의해 주십시오.

CREATE FUNCTION [dbo].[MyDateFunction] 
(@MyParameter varchar(max))
RETURNS TABLE 
AS
RETURN 
(
    --- Query your table or view or whatever and select the results.
    SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)

변수에 할당하려면 다음과 같은 작업을 수행할 수 있습니다.

Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));

스칼라 값 함수를 사용할 수도 있습니다.

CREATE FUNCTION TestDateFunction()  
RETURNS datetime  
BEGIN  
    RETURN (SELECT GetDate());
END

그러면 간단하게 할 수 있습니다.

Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;

다음은 동적 쿼리를 위한 솔루션입니다.

예를 들어, 접미사가 다른 테이블이 더 있는 경우:

dbo.SOMETHINGTABLE_ONE, dbo.SOMETHINGTABLE_TWO

코드:

DECLARE @INDEX AS NVARCHAR(20)
DECLARE @CheckVALUE AS NVARCHAR(max) = 'SELECT COUNT(SOMETHING) FROM 
dbo.SOMETHINGTABLE_'+@INDEX+''
DECLARE @tempTable Table (TempVALUE int)
DECLARE @RESULTVAL INT

INSERT INTO @tempTable
    EXEC sp_executesql @CheckVALUE

SET @RESULTVAL = (SELECT * FROM @tempTable)

DELETE @tempTable

SELECT @RESULTVAL 

여기에는 테이블 변수를 사용할 수 있습니다.

코드:

DECLARE @PreviousBusinessDay DATETIME
DECLARE @Temp TABLE(BusinessDay DATETIME)
INSERT INTO @Temp EXEC dbo.up_GetBusinessDay @Date, -1
SET @PreviousBusinessDay = (SELECT * FROM @Temp)
SELECT @PreviousBusinessDay

https://www.sqlservertutorial.net/sql-server-user-defined-functions/sql-server-table-variables/

언급URL : https://stackoverflow.com/questions/2245691/how-to-assign-an-exec-result-to-a-sql-variable