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?
triggers sql
11 svar · 867 visningar · startad av annasmurf
Det beror på vilken DBMS som används.
microsoft sql server 2003
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
LarsG: Måste inte triggern fästas till before update? (Annars är ju skadan redan skedd när felet kastas.)
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.
vad betyder 16,1 i detta?
raiseError ('Update not allowed',16,1)
så ni menar att denna låser raderna när flaggan är sann
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.
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...
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?
Vad menar du med: Vad skulle det göra om raderna blir låsta den korta stund som det tar att utföra update?