私は在庫管理用のデスクトップアプリケーションを開発しています。私も、すべての上記のアップデートとして挿入するには、ストアドプロシージャを作成しました ストアドプロシージャを使用してSQL Serverテーブルからレコードを削除できません
- 取引
- MATERIAL_TRANSACTION
- 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
@IDパラメータは、nvarchar(50)として宣言されていますが、コード内のリテラルは整数です。このパラメータは、基礎となるテーブルの 'TRANSACTION_ID'のデータ型と一致する必要があります。 –
'ntext'、' text'、および 'image'データ型は、将来のバージョンのSQL Serverでは削除されます。新しい開発作業でこれらのデータ型を使用しないようにし、現在使用しているアプリケーションを変更する計画を立ててください。代わりに 'nvarchar(max)'、 'varchar(max)'、 'varbinary(max)'を使用してください。 [詳細はこちら](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –