0

私が抱えている問題は、請求書番号をパラメーターとして取り、顧客の残高を更新するというプロシージャを作成することprc_cus_balance_updateです (宣言セクションを使用して、計算された請求書の合計を保持する totinv 番号変数を定義できるヒント)

これまでのところ、

ALTER PROCEDURE [dbo].[PRC_CUS_BALANCE_UPDATE]
   (@INVID INT)
AS
   DECLARE @INVTOT INT
   DECLARE @CUSID INT

   BEGIN
     SET NOCOUNT ON;

     SELECT CUS_CODE INTO CUSID
     FROM INVOICE
     WHERE INVOICE.INV_NUMBER = @INVID

     IF CUSID > 0 
        UPDATE CUSTOMER
        SET CUS_BALANCE = CUS_BALANCE +
                          (SELECT INV_TOTAL
                           FROM INVOICE
                           WHERE INV_NUMBER = INVID)
        WHERE CUS_CODE = CUSID
     END IF
   END

しかし、コンパイルしようとするたびに、キーワード END の近くで間違った構文が表示されます。オンラインで同様の投稿を見つけましたが、常に同じエラーが発生します。

4

2 に答える 2

1

他の問題もあるかもしれません:

CREATE PROCEDURE [dbo].[PRC_CUS_BALANCE_UPDATE]  --<<<<use CREATE to create !
   (@INVID INT)
AS
   DECLARE @INVTOT INT  --<<<<<<what is the point of this variable as it is not used?
   DECLARE @CUSID INT

   BEGIN
     SET NOCOUNT ON;

     /*<<<<if the following is only testing for the existence within INVOICE table then<<< 
     SELECT CUS_CODE 
     INTO CUSID
     FROM INVOICE
     WHERE INVOICE.INV_NUMBER = @INVID

     IF CUSID > 0 
     <<<<replace with following<<<<<*/
     IF EXISTS (SELECT 1 FROM INVOICE WHERE INVOICE.INV_NUMBER = @INVID)   

        BEGIN  --<<<<<as already mentioned
        UPDATE CUSTOMER
        SET CUS_BALANCE = CUS_BALANCE +
                          (SELECT INV_TOTAL
                           FROM INVOICE
                           WHERE INV_NUMBER = INVID) --<<<is this supposed to be =@INVID ?
        WHERE CUS_CODE = CUSID  --<<<this looks odd as it seems you are trying to say "CUS_CODE = <some table created earlier>" ?
        END;  --<<<<<as already mentioned
     END IF
   END
于 2013-04-07T20:58:50.543 に答える