webForumDet fria alternativet

triggers sql

11 svar · 867 visningar · startad av annasmurf

annasmurfMedlem sedan mars 2006237 inlägg
#1

hej är det någon som vet hur man skapar en triggers som kontrollera om en flagga i databsen är sann eller falsk är den sann så sa den spärra uppdateringen av denna post?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det beror på vilken DBMS som används.

annasmurfMedlem sedan mars 2006237 inlägg
#3

microsoft sql server 2003

LarsGMedlem sedan dec. 200012 464 inlägg
#4
create trigger preventUpdate
 on <tablename> after update
 as
 declare @flag varchar(10)
 set @flag = (select flag from flags where type = 'something')
 if  @flag = 'true'
     raiseError ('Update not allowed',16,1)

ungefär

nitro2k01Medlem sedan aug. 20039 342 inlägg
#5

LarsG: Måste inte triggern fästas till before update? (Annars är ju skadan redan skedd när felet kastas.)

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Ja, det är bättre men inte nödvändigt. De operationer som utförs i en trigger ingår i den atomicitet som finns för själva update-satsen. Om det uppstår ett fel i triggern så blir uppdateringen inte utförd.

annasmurfMedlem sedan mars 2006237 inlägg
#7

vad betyder 16,1 i detta?
raiseError ('Update not allowed',16,1)

annasmurfMedlem sedan mars 2006237 inlägg
#8

så ni menar att denna låser raderna när flaggan är sann

LarsGMedlem sedan dec. 200012 464 inlägg
#9

16 anger vilken hur allvarligt felet är.

Du kan läsa mer om raiseError här http://msdn.microsoft.com/en-us/library/aa238452(SQL.80).aspx

Om du har en after trigger så blir raderna låsta oavsett om flaggan är sann eller inte. Om du har en before trigger så blir det ingen update om flaggan är sann och därmed ingen låsning.

annasmurfMedlem sedan mars 2006237 inlägg
#10

Men om jag ska låsa raderna om flaggan är sann vad menar ni att jag ska ha då?
jag vill ju inte låsa raden om den är falsk...

LarsGMedlem sedan dec. 200012 464 inlägg
#11

Om du inte vill att uppdateringen utförs så får du använda en instead of trigger. http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx

Enligt dokumentationen så har SQL server inte stöd för before triggers. Det hade varit det enklaste.

Vad skulle det göra om raderna blir låsta den korta stund som det tar att utföra update?

annasmurfMedlem sedan mars 2006237 inlägg
#12

Vad menar du med: Vad skulle det göra om raderna blir låsta den korta stund som det tar att utföra update?

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