2017-10-07 10 views
0

私は在庫管理用のデスクトップアプリケーションを開発しています。私も、すべての上記のアップデートとして挿入するには、ストアドプロシージャを作成しました ストアドプロシージャを使用してSQL Serverテーブルからレコードを削除できません

  1. 取引
  2. MATERIAL_TRANSACTION
  3. TRANSACTION_DETAILS:

    私は3つのSQL Serverのテーブルを持っていますテーブル。

    TRANSACTIONSは私のマスターテーブルです。だから、更新クエリを使ってその列を更新します。 しかし、データベースに新しい行を挿入する前に、ディテール表である他の2つの表のレコードを削除する必要があります。

    このストアドプロシージャの行を削除できません。助けてください!

    私はあなたがプロシージャを実行するときに正確に起こるものを明確でした、次のSQL Serverのストアドプロシージャ

    ALTER PROCEDURE [dbo].[SAVE_TRANSACTION] 
        @ID NVARCHAR(50), 
        @REF_NO NVARCHAR(50), 
        @VCH_DATE DATE, 
        @VCH_TYPE INT, 
        @CR_AC INT, 
        @DR_AC INT, 
        @DOCKET_NO NVARCHAR(50), 
        @TRANSPORT NVARCHAR(50), 
        @DELIVERY_NOTE NTEXT, 
        @S_NAR NVARCHAR(100), 
        @L_NAR NTEXT, 
        @IS_REVERSE_CHARGE INT, 
        @INVOICE_REF INT, 
        @BUYER NVARCHAR(50), 
        @BUYER_CONTACT NVARCHAR(50), 
        @BUYER_ADDRESS NTEXT, 
        @BUYER_GSTIN NVARCHAR(50), 
        @BUYER_STATE NVARCHAR(50), 
        @BUYER_REG_TYPE INT, 
        @MATERIAL_TRANSACTION dbo.TVP_MATERIAL_TRANSACTION READONLY, 
        @TRANSACTION_DETAILS dbo.TVP_TRANSACTION_DETAILS READONLY, 
        @RETURN INT OUTPUT 
    AS 
        DECLARE @TRAN_ID INT 
    BEGIN 
        SET NOCOUNT ON; 
    
        DELETE FROM MATERIAL_TRANSACTION 
        WHERE ID > 0 
         AND TRANSACTION_ID = @ID; 
    
        DELETE FROM TRANSACTION_DETAILS 
        WHERE ID > 0 
         AND TRANSACTION_ID = @ID; 
    
        IF (@ID = 0) 
        BEGIN 
         INSERT INTO dbo.TRANSACTIONS(REF_NO, VCH_DATE, VCH_TYPE, CR_AC, DR_AC, 
                DOCKET_NO, TRANSPORT, DELIVERY_NOTE, 
                S_NAR, L_NAR, IS_REVERSE_CHARGE, 
                INVOICE_REF, BUYER, BUYER_CONTACT, BUYER_ADDRESS, 
                BUYER_GSTIN, BUYER_STATE, BUYER_REG_TYPE) 
         VALUES (@REF_NO, @VCH_DATE, @VCH_TYPE, @CR_AC, @DR_AC, 
           @DOCKET_NO, @TRANSPORT, @DELIVERY_NOTE, 
           @S_NAR, @L_NAR, @IS_REVERSE_CHARGE, 
           @INVOICE_REF, @BUYER, @BUYER_CONTACT, @BUYER_ADDRESS, 
           @BUYER_GSTIN, @BUYER_STATE, @BUYER_REG_TYPE); 
    
         SET @TRAN_ID = @@IDENTITY 
        END 
        ELSE 
        BEGIN 
         UPDATE dbo.TRANSACTIONS 
         SET REF_NO = @REF_NO, 
          VCH_DATE = @VCH_DATE, VCH_TYPE = @VCH_TYPE, 
          CR_AC = @CR_AC, DR_AC = @DR_AC, 
          DOCKET_NO = @DOCKET_NO, 
          TRANSPORT = @TRANSPORT, DELIVERY_NOTE = @DELIVERY_NOTE, 
          S_NAR = @S_NAR, L_NAR = @L_NAR, 
          IS_REVERSE_CHARGE = @IS_REVERSE_CHARGE, 
          INVOICE_REF = @INVOICE_REF, 
          BUYER = @BUYER, BUYER_CONTACT = @BUYER_CONTACT, 
          BUYER_ADDRESS = @BUYER_ADDRESS, 
          BUYER_GSTIN = @BUYER_GSTIN, BUYER_STATE = @BUYER_GSTIN, 
          BUYER_REG_TYPE = @BUYER_REG_TYPE 
         WHERE 
          ID = @ID; 
    
         SET @TRAN_ID = @ID; 
        END 
    
        --UPDATE MATERIAL_TRANSACTION SET IS_DELETED=1 WHERE [email protected]; 
        -- UPDATE TRANSACTION_DETAILS SET IS_DELETED=1 WHERE [email protected]; 
        INSERT INTO TRANSACTION_DETAILS (TRANSACTION_ID, AC_ID, TRAN_TYPE, 
                CR_AMT, DR_AMT, AMT_PERCENT, IS_PARENT) 
         SELECT 
          @TRAN_ID, [AC_ID], [TRAN_TYPE], 
          [CR_AMT], [DR_AMT], [AMT_PERCENT], [IS_PARENT] 
         FROM 
          @TRANSACTION_DETAILS TVP 
    
        INSERT INTO MATERIAL_TRANSACTION (TRANSACTION_ID, PRODUCT_ID, QTY, 
                 UNIT_ID, DESCRIPTION, HSN_CODE, 
                 PRICE, DISCOUNT_AMT, DISCOUNT_PERCENT, 
                 CGST_PERCENT, SGST_PERCENT, IGST_PERCENT, 
                 CGST_AMT, SGST_AMT, IGST_AMT) 
         SELECT 
          @TRAN_ID, [PRODUCT_ID], [QTY], 
          [UNIT_ID], [DESCRIPTION], [HSN_CODE], 
          [PRICE], [DISCOUNT_AMT], [DISCOUNT_PERCENT], 
          [CGST_PERCENT], [SGST_PERCENT], [IGST_PERCENT], 
          [CGST_AMT], [SGST_AMT], [IGST_AMT] 
         FROM 
          @MATERIAL_TRANSACTION TVP 
    
        SELECT @RETURN = @TRAN_ID 
    END 
    
+0

@IDパラメータは、nvarchar(50)として宣言されていますが、コード内のリテラルは整数です。このパラメータは、基礎となるテーブルの 'TRANSACTION_ID'のデータ型と一致する必要があります。 –

+0

'ntext'、' text'、および 'image'データ型は、将来のバージョンのSQL Serverでは削除されます。新しい開発作業でこれらのデータ型を使用しないようにし、現在使用しているアプリケーションを変更する計画を立ててください。代わりに 'nvarchar(max)'、 'varchar(max)'、 'varbinary(max)'を使用してください。 [詳細はこちら](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

答えて

0

を使用しましたか?なぜあなたは行を削除できないのですか?エラーメッセージが表示されるか、削除された行がありませんか?

+0

エラーは表示されません。 delete文は、where節とともに使用すると単純にスキップされます。 where節がなければ、テーブルを切り捨てるように実行します –

+0

サンプルデータを与えると役立つかもしれませんが、SQL Serverが使用している基準を持つ行を見つけることができないと言うことができます。 ID列がテーブル上の整数である場合は、変数に同じデータ型を使用する必要があります。プロシージャに渡すパラメータを使用して簡単な選択を実行しようとすると、行も返されません。 –

関連する問題