webForumDet fria alternativet

T-SQL

6 svar · 290 visningar · startad av Han-Solo

Han-SoloMedlem sedan jan. 2001290 inlägg
#1

Jag har missat nått vitalt...

Jag gör en stroed procedure som lägger till en användare i mitt system. Den proceduren skall göra ett gäng saker så jag har lagt den i en trans.

begin trans
insert into...
[...]
if @@error > 0
rollback tran
else
commit tran

till saken hör att jag har satt användarnamnet som unikt i en tabell så det går fel om jag försöker lägga till en användare med samma användarnamn vilket är riktigt... men min fråga är... varför är @@error fortfarande 0 trotts att inserten går fel???

ska jag måsta kolla om användarnamnet finns först och ta omhand om just det felet själv??? verkar ju dumt...

LarsGMedlem sedan dec. 200012 464 inlägg
#2

@@error sätts efter varje sats.

Han-SoloMedlem sedan jan. 2001290 inlägg
#3

efter varje sats... ska jag slänga in nått 'go' menar du?
har testat men får det inte att funka...

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Nej, rys, inga go.

insert ...
-- @@error får ett värde
if @@error <> 0 set @latestError = @@error
-- @@error får ett nytt värde
set ...
--- @@error får ett nytt värde

så om du vill behålla värdet för @@error så måste du lagra det i en annan variabel.

Han-SoloMedlem sedan jan. 2001290 inlägg
#5

Ok... nu börjar det koppla... nu tror jag att jag fattar varför det blir rätt fast det är fel...

först körs
insert into... som går fel...
@@error annat än 0
sen kör jag en fråga som går rätt
då bilr @@error 0 igen
och min if på slutet som kollar om @@error är skild från 0 säger att den är 0

kan det verkligen vara sant?
ska jag måsta kolla efter varje sats om @@error är skild från 0 ???

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Jo, så är det

Han-SoloMedlem sedan jan. 2001290 inlägg
#7

stööön.... är det sant!?

gu' va' bängligt!

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)