[英]SQL TRANSACTION Begin End mismatch?
盡管我能夠成功創建存儲過程,但使用它時出現"TRANSACTION BEGIN END MISMATCH"
錯誤。 當我刪除事務時,存儲過程工作正常。
ALTER PROCEDURE Proc_LoanRepayment @LASAcctno [VARCHAR] (15),
@EntryDate [VARCHAR] (8),
@ValueDate [VARCHAR] (8),
@ModeofPayment VARCHAR(20),
@ChqNo VARCHAR(20),
@ChqDate VARCHAR(8),
@ChqAmt MONEY,
@CstBnkNo VARCHAR(20),
@Cstbnkid VARCHAR(20),
@CmpBnkNo VARCHAR(20),
@Cmpbnkid VARCHAR(20),
@Narration1 [VARCHAR] (100),
@Narration2 [VARCHAR] (100),
@EntryType VARCHAR(30),
@PostingString [VARCHAR] (max)
AS
BEGIN TRAN
DECLARE @string AS VARCHAR(max)
DECLARE Cur_A CURSOR FOR
SELECT *
FROM dbo.split(@PostingString, ',')
OPEN Cur_a
FETCH NEXT FROM cur_a INTO @string
WHILE @@FETCH_STATUS = 0
BEGIN
IF ( object_id('TempDB..#Temp') ) IS NOT NULL
BEGIN
DROP TABLE #Temp
END
-- declare @temp table (srno int identity,items varchar(max))
SELECT *
INTO #temp
FROM dbo.Split(@string, '|')
DECLARE @LoanNo AS VARCHAR(20),
@BankAcct AS VARCHAR(20),
@TDS AS MONEY,
@LASPAC AS MONEY,
@INTRND AS MONEY,
@INTRAC AS MONEY,
@STAXPLRVL AS MONEY,
@PNLINT AS MONEY,
@OVRDUEINT AS MONEY,
@STMPDTYRVL AS MONEY,
@PROFESRVL AS MONEY,
@DOCCHGRVL AS MONEY,
@CHQBNCRVL AS MONEY
ALTER TABLE #temp
ADD srno INT IDENTITY
SELECT @LoanNo = items
FROM #temp
WHERE srno = 1
SELECT @bankAcct = items
FROM #temp
WHERE srno = 2
SELECT @TDS = items
FROM #temp
WHERE srno = 3
SELECT @LASPAC = items
FROM #temp
WHERE srno = 4
SELECT @INTRND = items
FROM #temp
WHERE srno = 5
SELECT @INTRAC = items
FROM #temp
WHERE srno = 6
SELECT @STAXPLRVL = items
FROM #temp
WHERE srno = 7
SELECT @PNLINT = items
FROM #temp
WHERE srno = 8
SELECT @OVRDUEINT = items
FROM #temp
WHERE srno = 9
SELECT @STMPDTYRVL = items
FROM #temp
WHERE srno = 10
SELECT @PROFESRVL = items
FROM #temp
WHERE srno = 11
SELECT @DOCCHGRVL = items
FROM #temp
WHERE srno = 12
SELECT @CHQBNCRVL = items
FROM #temp
WHERE srno = 13
INSERT INTO Tbl_BankEntry
(LASAcctno,
EntryDate,
ValueDate,
ModeofPayment,
ChqNo,
ChqDate,
ChqAmt,
CstBnkNo,
Cstbnkid,
CmpBnkNo,
Cmpbnkid,
Narration1,
Narration2,
LoanNo,
BankAcct,
TDS,
LASPAC,
INTRND,
INTRAC,
STAXPLRVL,
PNLINT,
OVRDUEINT,
STMPDTYRVL,
PROFESRVL,
DOCCHGRVL,
CHQBNCRVL,
status,
mkrdt,
mkrid,
EntryType)
VALUES ( @LASAcctno,
@EntryDate,
@ValueDate,
@ModeofPayment,
@ChqNo,
@ChqDate,
@ChqAmt,
@CstBnkNo,
@Cstbnkid,
@CmpBnkNo,
@Cmpbnkid,
@Narration1,
@Narration2,
@LoanNo,
@BankAcct,
@TDS,
@LASPAC,
@INTRND,
@INTRAC,
@STAXPLRVL,
@PNLINT,
@OVRDUEINT,
@STMPDTYRVL,
@PROFESRVL,
@DOCCHGRVL,
@CHQBNCRVL,
'P',
GETDATE(),
'c97176',
@EntryType )
FETCH NEXT FROM Cur_a INTO @string
END
CLOSE cur_a
DEALLOCATE cur_a
RETURN
COMMIT TRAN
您的RETURN
語句在您的COMMIT
語句之前。
建議您研究@Martin Smith的建議,即使用表值參數而不是拆分字符串(SQL Server 2008+),以及@ Damien_The_Unbeliever建議的預期順序。
另外,嘗試重寫過程,以便它不需要游標,並且您在事務內部所做的工作最少。
另外,在提交之前,查看TRY/CATCH
並檢查是否存在活動事務( @@TRANCOUNT
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.