복붙노트

[SQL] 선택 쿼리 내부에 저장 프로 시저를 실행하는 방법

SQL

선택 쿼리 내부에 저장 프로 시저를 실행하는 방법

SELECT col1,
       col2,
       col3,

EXEC GetAIntFromStoredProc(T.col1) AS col4
     FROM Tbl AS T
     WHERE (col2 = @parm) 

어떻게 2008 SQL 서버에서이 SQL 쿼리를 작성하는?

해결법

  1. ==============================

    1.덕분에 @twoleggedhorse.

    덕분에 @twoleggedhorse.

    여기서, 용액이다.

  2. ==============================

    2.기능은 선택 루프 내에서 전화를 쉽게,하지만 그들은 당신이 등을 삽입, 업데이트, 삭제, 그들은 쿼리 작업에만 유용을 실행하지 않습니다. 당신은 데이터를 조작하기 위해 저장 프로 시저가 필요합니다.

    기능은 선택 루프 내에서 전화를 쉽게,하지만 그들은 당신이 등을 삽입, 업데이트, 삭제, 그들은 쿼리 작업에만 유용을 실행하지 않습니다. 당신은 데이터를 조작하기 위해 저장 프로 시저가 필요합니다.

    그래서,이 질문에 대한 진짜 대답은 당신이 "커서"를 통해 선택 구문의 결과를 반복하고 루프 내에서 프로 시저를 호출해야한다는 것입니다. 다음은 그 예이다 :

    DECLARE @myId int;
    DECLARE @myName nvarchar(60);
    DECLARE myCursor CURSOR FORWARD_ONLY FOR
        SELECT Id, Name FROM SomeTable;
    OPEN myCursor;
    FETCH NEXT FROM myCursor INTO @myId, @myName;
    WHILE @@FETCH_STATUS = 0 BEGIN
        EXECUTE dbo.myCustomProcedure @myId, @myName;
        FETCH NEXT FROM myCursor INTO @myId, @myName;
    END;
    CLOSE myCursor;
    DEALLOCATE myCursor;
    

    @@ FETCH_STATUS 당신을 위해 업데이트되는 표준 변수합니다. 여기 개체 이름의 나머지 부분은 사용자 정의입니다.

  3. ==============================

    3.만큼 당신이 당신의 저장 프로 시저의 모든 INSERT 또는 UPDATE 문을 수행하지 않는, 당신은 아마 함수 확인하는 것이 좋습니다.

    만큼 당신이 당신의 저장 프로 시저의 모든 INSERT 또는 UPDATE 문을 수행하지 않는, 당신은 아마 함수 확인하는 것이 좋습니다.

    저장 과정은 외부 프로그램에 의해 실행하거나, 타이밍 된 간격에 대해이다.

    내가 할 수있는 것보다 여기에 대한 답변은 더 잘 설명 할 것입니다 :

    기능 비교는 SQL Server의 저장 프로 시저

  4. ==============================

    4.당신은 그것으로 당신의 PROC 출력 및 삽입과 일치하는 임시 테이블을 만들 수 있습니다.

    당신은 그것으로 당신의 PROC 출력 및 삽입과 일치하는 임시 테이블을 만들 수 있습니다.

    CREATE TABLE #Temp (
        Col1 INT
    )
    
    INSERT INTO #Temp
        EXEC MyProc
    
  5. ==============================

    5."불가능". 대신 저장 프로 시저의 기능을 사용할 수 있습니다.

    "불가능". 대신 저장 프로 시저의 기능을 사용할 수 있습니다.

  6. ==============================

    6.동적 뷰를 생성하고 그것으로부터 결과를 얻을 .......

    동적 뷰를 생성하고 그것으로부터 결과를 얻을 .......

    CREATE PROCEDURE dbo.usp_userwise_columns_value
    (
        @userid BIGINT
    )
    AS 
    BEGIN
            DECLARE @maincmd NVARCHAR(max);
            DECLARE @columnlist NVARCHAR(max);
            DECLARE @columnname VARCHAR(150);
            DECLARE @nickname VARCHAR(50);
    
            SET @maincmd = '';
            SET @columnname = '';
            SET @columnlist = '';
            SET @nickname = '';
    
            DECLARE CUR_COLUMNLIST CURSOR FAST_FORWARD
            FOR
                SELECT columnname , nickname
                FROM dbo.v_userwise_columns 
                WHERE userid = @userid
    
            OPEN CUR_COLUMNLIST
            IF @@ERROR <> 0
                BEGIN
                    ROLLBACK
                    RETURN
                END   
    
            FETCH NEXT FROM CUR_COLUMNLIST
            INTO @columnname, @nickname
    
            WHILE @@FETCH_STATUS = 0
                BEGIN
                    SET @columnlist = @columnlist + @columnname + ','
    
                    FETCH NEXT FROM CUR_COLUMNLIST
                    INTO @columnname, @nickname
                END
            CLOSE CUR_COLUMNLIST
            DEALLOCATE CUR_COLUMNLIST  
    
            IF NOT EXISTS (SELECT * FROM sys.views WHERE name = 'v_userwise_columns_value')
                BEGIN
                    SET @maincmd = 'CREATE VIEW dbo.v_userwise_columns_value AS SELECT sjoid, CONVERT(BIGINT, ' + CONVERT(VARCHAR(10), @userid) + ') as userid , ' 
                                + CHAR(39) + @nickname + CHAR(39) + ' as nickname, ' 
                                + @columnlist + ' compcode FROM dbo.SJOTran '
                END
            ELSE
                BEGIN
                    SET @maincmd = 'ALTER VIEW dbo.v_userwise_columns_value AS SELECT sjoid, CONVERT(BIGINT, ' + CONVERT(VARCHAR(10), @userid) + ') as userid , ' 
                                + CHAR(39) + @nickname + CHAR(39) + ' as nickname, ' 
                                + @columnlist + ' compcode FROM dbo.SJOTran '
                END
    
            EXECUTE sp_executesql @maincmd
    END
    
    -----------------------------------------------
    SELECT * FROM dbo.v_userwise_columns_value
    
  7. from https://stackoverflow.com/questions/14506871/how-to-execute-a-stored-procedure-inside-a-select-query by cc-by-sa and MIT license