ich eine Transaktion Rollback kann, wenn ein Fehler auftritt:TSQL Transaktion Überprüfung sowohl @@ ERROR und @@ ROWCOUNT nach einer Erklärung
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
...
Aber wenn es keine Einträge in den Table1
mit der Col1 = @Param1
Transaktion erfolgreich verpflichtet, Das ist schlecht für mich. Ich würde gerne überprüfen, ob Col2 = 'something'
wirklich fertig ist. Wenn nicht, Rollback mit einem bestimmten Rückgabecode.
Wenn ich versuche, @@rowcount
Prüfung nach @@error
Prüfung einzufügen, wie folgt aus:
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRAN
RETURN -27
END
...
es Rollbacks immer an dieser Stelle, weil @@rowcount
die allerletzte Anweisung wertet, so dass es immer 0
entspricht.
Wie in so einem Fall sowohl die @@error
als auch die Anzahl der betroffenen Zeilen überprüfen?
+1. Ja. Es ist ein klassischer Fehler. –