我正在開發用於庫存管理的桌面應用程序。無法使用存儲過程從SQL Server表中刪除記錄
我在SQL Server中3個表:
- 交易
- MATERIAL_TRANSACTION
- TRANSACTION_DETAILS
我創建了一個存儲過程來插入以及更新上述所有表。
TRANSACTIONS
是我的主表。所以,我使用更新查詢來更新其列。 但是在將新行插入數據庫之前,需要刪除其他兩個表(即詳細表)的記錄。
我無法刪除此存儲過程中的行。請幫忙!
我用下面的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」的數據類型相匹配。 –
未來版本的SQL Server中將刪除'ntext','text'和'image'數據類型。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [請參閱此處](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –