[SQL Server] Transactions

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 00:54
Ik heb een hele simpele transaction gemaakt:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BEGIN TRANSACTION
    DECLARE @errorCode int
    SELECT @errorCode = 0

UPDATE aaaaa SET id = 'a'
IF ( @@ERROR <> 0 )
    SELECT @errorCode = @@ERROR


IF ( @errorCode = 0 )
BEGIN
    COMMIT TRAN
    PRINT 'T1 committed' + STR( @errorCode )
END
ELSE
BEGIN
    ROLLBACK TRAN
    PRINT 'T1 rolled back' + STR( @errorCode )
END
De update query gaat altijd fout, en als ik deze stored procedure uitvoer in de query analyser krijf ik de volgende melding: "Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 7, current count = 8." Wat klopt er niet aan mijn transaction? Ik kom allemaal voorbeelden tegen op het net maar die geven hetzelfde resultaat.

Roomba E5 te koop


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Implicit transactions aan staan?

En wat is er fout aan die UPDATE? Bestaat die tabel of kolom niet?

Professionele website nodig?


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 00:54
Ok met implicit transactions aan gaat het beter, maar als ik nu in de query analyser deze stored procedure uitvoer, krijg ik alsnog als uitvoer "Invalid object name 'aaaaa'." (Klopt ook wel want die bestaat niet), maar die melding hoor ik toch niet te krijgen? Of wel?

Roomba E5 te koop


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Die error hoor je wel te krijgen. Alle errors worden naar je client gestuurd (beter: in je sysmessages tabel gezet), zelfs als je stored procedure gewoon doorgaan zonder afgebroken te worden.

(kan je er met stored procedures in sqlserver ook voor zorgen dat een error meteen je stored procedure afbreekt? Of moet je altijd die error codes afvangen? )

[ Voor 14% gewijzigd door Infinitive op 17-08-2004 18:26 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 00:54
Wat ik dus eigenlijk wil is de errorcode opvangen en terugsturen, zodat ik deze kan loggen of iets dergelijks. Ik weet alleen niet of ik zo op de goede weg zit?

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Ik denk dat je dan eens naar RAISERROR moet kijken.

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 00:54
Nou ja dat is ook weer niet nodig. Ik hoef niet per se custom errormessages te maken. Ik weet dat ik aan de hand van @@ERROR de error uit sysmessages kan halen, maar daar staan variabelen in. Bijv: Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'. Dit is in principe goed, maar ik wil wel graag de error met de variabelen ingevuld loggen, zoals je die in de query analyser te zien krijgt

Roomba E5 te koop


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Kan niet, wanneer een error plaatsvindt kapt SqlServer met de batch en report de error. Er zit niet iets in van 'On Error Goto label' of 'try code catch exception'... (wel in yukon, niet in huidige versies).

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 00:54
ik zat meer een beetje te denken aan zoiets:
code:
1
2
3
4
5
6
7
begin tran
query
if @@ERROR <> 0 
  exec logError @@ERROR
  rollback trans
else
  commmit tran

Dat moet toch wel mogelijk zijn?

Roomba E5 te koop


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

EfBe schreef op 18 augustus 2004 @ 09:38:
Kan niet, wanneer een error plaatsvindt kapt SqlServer met de batch en report de error. Er zit niet iets in van 'On Error Goto label' of 'try code catch exception'... (wel in yukon, niet in huidige versies).
Wat ik dan ook bedoelde met mijn vraag gisteren wat voor fout er optrad :) Als het een compile error is knalt ie linea recta. Als een SP die hij aanroept failed krijg je wel een @@ERROR gezet. Compilation error kan ie gewoon niet overheen.

Professionele website nodig?

Pagina: 1