0
ストアドプロシージャを作成しました。エラーが発生したときにすべてをロールバックする必要がありますが、私は見た目は変わっていませんが、ポップアウトするエラーは見つかりませんでした。トランザクション不一致のSQLストアドプロシージャ
[例外:予期しないSQLエラーが130後のトランザクション数EXECUTEラインでプロシージャ 『ST_IV_ItemPrice.SP_Insert』内のエラー番号266.16.2とソース「ネットSqlClientデータプロバイダ」で発生したBEGINの不一致数を示しますおよびCOMMITステートメント。前のカウント= 1、現在のカウント= 0.]
私はここで助けを得ることができたらいいと思う。
CREATE PROCEDURE [dbo].[ST_IV_ItemPrice.SP_Insert]
/*parameters*/
AS
BEGIN
IF OBJECT_ID(''tempdb..#tempPriceList'') IS NOT NULL
/*Then it exists*/
DROP TABLE #tempPriceList
CREATE TABLE #tempPriceList(PriceListid int, NewCurrencyUnitPrice decimal(19, 5))
DECLARE @Error int,
@NextListid int,
@NewCurrencyUnitPrice decimal(19, 5),
@NoRounding int = 0,
@UserSpecified int = 4
BEGIN TRANSACTION
BEGIN TRY
/*Insert item to table*/
SET @Id = SCOPE_IDENTITY()
SET @Error = @@ERROR
IF @Error = 0 AND @AutoGenerate = 1
BEGIN
INSERT INTO #tempPriceList(PriceListid, NewCurrencyUnitPrice)
VALUES(@Id, @Price)
WHILE(EXISTS(SELECT * FROM #tempPriceList))
BEGIN
SELECT TOP 1 @NextListid = [id], @NewCurrencyUnitPrice = [NewCurrencyUnitPrice]
FROM #tempPriceList
/*INSERT SELECT STATEMENT*/
INSERT INTO #tempPriceList ([PriceListid],[NewCurrencyUnitPrice])
Select [ListId] , [NewCurrencyUnitPrice]
IF @Error = 0 AND @SetExpiredDate = 1 AND @FromDate IS NOT NULL
BEGIN
/*Update item that is same as inserted and set to inactive*/
END
DELETE FROM #tempPriceList WHERE PriceListid = @NextListid
END
END
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
IF @@TRANCOUNT>0
COMMIT TRANSACTION
RETURN @Error
END
BEGINとCOMMIT文の不一致の数を示し、私はあなたが書かれている通り試してみましたが、私はまだ同じエラー 「トランザクション数は、後にEXECUTEます。前のカウント= 1、現在の数= 0] " –
私は私のプログラムでそれを処理したいと思うので、私はraiserrorを計画しておらず、ユーザが理解できないエラーページに入ることをウェブサイトには望まないでしょう。 –
あなたが' CATCH '全て大丈夫? –