2017-11-04 1 views
0

테이블에서 Update 문을 실행하려고합니다. 이 문은 Cursor 및 While 블록 내에 있습니다. 디버거에서 체크하고 값이 명령문과 변수에 들어오지 만 여전히 업데이트가 테이블 필드에 값을 넣지 않습니다. 내가 여기서 뭘 잘못하고 있는지 조언 해주세요.커서 & While 블록 내에서 Update 문이 작동하지 않습니다.

ALTER PROCEDURE SP_PO1 @P1 int 

AS 
BEGIN 

    SET NOCOUNT ON; 

    DECLARE @DOC AS INT; 
    DECLARE @CASH AS FLOAT; 
    DECLARE @TENTYPE AS VARCHAR(100); 
    DECLARE @UDF AS VARCHAR(100); 
    DECLARE @COUNTER AS INT; 
    DECLARE @SQL AS VARCHAR(500); 

    SELECT @DOC=DOCTYPE FROM InvNum WHERE AutoIndex = @P1; 
    IF @DOC = 6 
     BEGIN 
      SET @COUNTER = 1; 
      DECLARE Cur_Tender CURSOR FOR 
       SELECT Tender.TenderNo FROM Tender; 

      OPEN CUR_TENDER; 
      FETCH NEXT FROM CUR_TENDER INTO @TENTYPE; 

      WHILE @@FETCH_STATUS = 0 
      BEGIN 

      SELECT @CASH = ISNULL(_btblPOSTenderTx.fTxAmount,0) FROM _btblPOSTenderTx INNER JOIN Tender ON _btblPOSTenderTx.iTenderID = Tender.IdTender INNER JOIN _btblPOSXZTable ON _btblPOSTenderTx.iPOSXZTableID = _btblPOSXZTable.IDPOSXZTable WHERE (_btblPOSXZTable.iTillTxType = 7) and (_btblPOSXZTable.IDPOSXZTable = (select Max(IDPOSXZTable) from [dbo].[_btblPOSXZTable])) AND (TenderNo = @TENTYPE); 

       SET @UDF = 'ufIDPOSInvTENDER' + CONVERT(VARCHAR(2),@COUNTER); 

       UPDATE InvNum SET @[email protected] WHERE AutoIndex = @P1; 

       SET @COUNTER = @COUNTER + 1; 

       FETCH NEXT FROM CUR_TENDER INTO @TENTYPE; 
      END 
     END 
    CLOSE CUR_TENDER 
    DEALLOCATE CUR_TENDER 
END 
GO 

답변

0

업데이트 변수

UPDATE InvNum SET @[email protected] WHERE AutoIndex = @P1; 

동적 열 이름하려는 경우

UPDATE InvNum SET <column>[email protected] WHERE AutoIndex = @P1; 

업데이트 테이블 열 - 사용하는 동적 SQL을

EXEC('UPDATE InvNum SET ' + @UDF + '=' + CAST(@CASH as VARCHAR(50) + ' WHERE AutoIndex = ' + CAST(@P1 as VARCHAR(5) '); 
+0

열 이름을 동적으로 생성된다 . 다음과 같은 5 개의 열이 있습니다. ufIDPOSInvTENDER2, ufIDPOSInvTENDER3, ufIDPOSInvTENDER4, ufIDPOSInvTENDER5, –

+0

안녕하세요, 나는 당신이 의미하는 것을 가지고 있습니다. 이 문은 실제로 다른 변수에 값을 할당합니다. 이 경우 솔루션을 설명 할 수 있습니까? –

+0

은 SQL 문자열을 생성하고 –

관련 문제