名前:これに約10時間を費やしていますが、分かりませんでした。私は、入力データと一致する2つのテーブルからレコードを削除するT-SQLストアドプロシージャを作成しようとしています。削除が成功し、トランザクションがコミットされた場合はメッセージを表示し、レコードが見つからない場合はトランザクションをロールバックし、キャッチしてみてください。私は以下のコードを書いていますが、データが入力と一致しなくても、 "Command(s)completed successfully"が得られます。メッセージ!私は間違いを修正するためにあなたの助けに感謝します。存在しないレコードを削除するストアドプロシージャのテーブルからTry Catchの表示が正常に完了しました
Use Northwind
Go
Create Procedure uspDeleteOrder
@orderID int As
Set nocount on
If Exists (Select * from Orders Where OrderID = @orderID)
Begin Try
Begin Transaction
Delete From dbo.[Order Details]
Where dbo.[Order Details].OrderID = @orderID
Delete From Orders
Where OrderID = @orderID
COMMIT TRANSACTION
Print 'The article has been deleted!'
End Try
Begin Catch
IF (@@trancount > 0)
Begin
ROLLBACK TRANSACTION
End
PRINT '*************Error Detail****************'
PRINT 'Error Number :' + CAST(ERROR_NUMBER() AS VARCHAR)
PRINT 'Error Severity:' + CAST(ERROR_SEVERITY() AS VARCHAR)
PRINT 'Error State :' + CAST(ERROR_STATE() AS VARCHAR)
PRINT 'Error Line :' + CAST(ERROR_LINE() AS VARCHAR)
PRINT 'Error Message :' + ERROR_MESSAGE()
End Catch
Exec uspDeleteOrder 11077
がUPDATE:
:[OK]を、私はしかし、私はそれはそれを行うための正しい方法だかどうかわからないんだけど、かなり多くの仕事をしていません推測し、これに私のコードを編集したこれまでのところ私のコードは次のようになりますCreate Procedure uspDeleteOrder
@orderID int As
Set nocount on
If Exists (Select * from Orders Where OrderID = @orderID)
Begin
Begin Try
Begin Transaction
Delete From dbo.[Order Details]
Where dbo.[Order Details].OrderID = @orderID
Delete From Orders
Where OrderID = @orderID
COMMIT TRANSACTION
Print 'The Order has been deleted!'
return
End Try
Begin Catch
IF (@@trancount > 0)
Begin
ROLLBACK TRANSACTION
RAISERROR ('Error', 16,1);
End
PRINT '*************Error Detail****************'
PRINT 'Error Number :' + CAST(ERROR_NUMBER() AS VARCHAR)
PRINT 'Error Severity:' + CAST(ERROR_SEVERITY() AS VARCHAR)
PRINT 'Error State :' + CAST(ERROR_STATE() AS VARCHAR)
PRINT 'Error Line :' + CAST(ERROR_LINE() AS VARCHAR)
PRINT 'Error Message :' + ERROR_MESSAGE()
End Catch
End
Else
Begin
RAISERROR ('No Order ID', 16,1);
End
'try'ブロックの最後に' return'を追加してみてください。 – FDavidov
ところで、削除のために一致するレコードが見つからなくても、条件付きのDELETEは常に成功します。 – FDavidov
@FDavidovあなたは最初のTryブロックを意味しますか?どのように役立ちますか?私は終わりの試行の前にリターンを追加しましたが、違いはありません –