2017-12-02 149 views
0

我有一个这样的查询:插入并运行存储过程与每个选择

​​

我有唯一的问题是参数@iTACE_KEY - 它是唯一的(主密钥)和产生这样的:

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

我想运行这句话在SELECT语句中的每一行,所以每个插入将产生@iTACE_KEYTASK_KEY/CAET_KEY从表JETACE采取相结合。这可能吗?

+1

未与PROC。假设proc不修改数据,你可以将proc转换成一个用于查询的函数。 –

+0

您是否考虑过创建一个包含主键生成代码的函数,该代码可以在select语句中调用? – danielcooperxyz

+1

顺便说一句,存储过程名前缀'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