2017-12-02 3 views
0

을 선택으로 나는이 같은 쿼리가 저장 프로 시저를 실행 : 내가 가진에 삽입하고 각

INSERT INTO JETACE (TACE_KEY, TASK_KEY, CAET_KEY) 
    SELECT @iTACE_KEY, TASK_KEY, CAET_KEY 
    FROM JETACE 
    WHERE TASK_KEY = @iTASK_KEY_CON 

유일한 문제는 매개 변수 @iTACE_KEY - 그것은 같은 독특한 (기본 키) 및 생성됩니다

EXEC @iTACE_KEY = sp_GETKEY 'JETACE', '0', '1', '9', @iUserId, @cTask='2' 

내가 선택 문에 각 행이 문장을 실행하고 싶습니다, 각각의 삽입 테이블 JETACE에서 가져온 @iTACE_KEYTASK_KEY/CAET_KEY 생성에서 결합됩니다. 이것이 가능한가?

+1

아니 PROC와 함께. proc이 데이터를 수정하지 않는다고 가정 할 때 proc를 쿼리에 사용할 함수로 변환 할 수 있습니다. –

+0

select 문에서 호출 할 수있는 기본 키 생성 코드를 보유하는 함수를 만드는 것이 고려 되었습니까? – danielcooperxyz

+1

BTW에서 저장 프로 시저 이름 접두사'sp_'는 [documentation] (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure- transact-sql). –

답변

0

나는 커서 문제를 해결했습니다

DECLARE JETACE_01 cursor for 
      SELECT CAET_KEY, TACE_SRT, TACE_STA 
      FROM JETACE 
      WHERE TASK_KEY = @iTASK_KEY_CON 

      OPEN JETACE_01 
      FETCH NEXT FROM JETACE_01 
      INTO @iCAET_KEY, @cTACE_SRT, @cTACE_STA 


      WHILE @@FETCH_STATUS = 0 
      begin 

      EXEC @iTACE_KEY = sp_GETKEY 'JETACE', '0', '1', '9', @iUserId, @cTask='2' 
      IF (@@ERROR <> 0) OR (@iTACE_KEY < 0) 
      BEGIN 
       IF @cTask = '6' 
        SELECT -61 TACE_KEY 
       RETURN -61 
      END 

      INSERT INTO JETACE (TACE_KEY, TASK_KEY, CAET_KEY, TACE_SRT, TACE_STA, TACE_DAT, TACE_UAD, TACE_TAD) 
      VALUES(@iTACE_KEY, @iTASK_KEY, @iCAET_KEY, @cTACE_SRT, @cTACE_STA, GETDATE(), @iUserId, GETDATE()) 


      FETCH NEXT FROM JETACE_01 
      INTO @iCAET_KEY, @cTACE_SRT, @cTACE_STA 

      END 


      CLOSE JETACE_01 
      DEALLOCATE JETACE_01