mogę cofnąć transakcję, jeśli wystąpi błąd:transakcja TSQL sprawdzanie zarówno @@ @@ błąd i ROWCOUNT po oświadczeniu
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
...
Ale jeśli nie ma żadnych wpisów w Table1
z transakcją Col1 = @Param1
zobowiązuje się powodzeniem, co jest dla mnie złe. Chciałbym sprawdzić, czy naprawdę jest zrobione Col2 = 'something'
. Jeśli nie, wycofaj z określonym kodem powrotu.
Gdy próbuję wstawić @@rowcount
czek po @@error
czeku, jak następuje:
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
...
zawsze cofanie w tym momencie, ponieważ @@rowcount
ocenia bardzo ostatnią wypowiedź więc zawsze równa 0
.
Jak w takim przypadku sprawdzić zarówno liczbę @@error
, jak i liczbę uszkodzonych wierszy?
+1. Tak. To klasyczny błąd. –