---
title: "triggers sql"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/179690-triggers-sql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "annasmurf"
published: "2009-08-07T11:18:42.000Z"
updated: "2009-08-12T04:29:19.000Z"
replies: 11
views: 893
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/179690-triggers-sql"
---

# triggers sql

## #1 — annasmurf, 2009-08-07T11:18Z

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?

Permalänk: https://www.webforum.nu/p/179690

## #2 — LarsG, 2009-08-07T11:34Z

Det beror på vilken DBMS som används.

Permalänk: https://www.webforum.nu/p/2198077

## #3 — annasmurf, 2009-08-07T11:47Z

microsoft sql server 2003

Permalänk: https://www.webforum.nu/p/2198081

## #4 — LarsG, 2009-08-07T12:56Z

```
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

Permalänk: https://www.webforum.nu/p/2198086

## #5 — nitro2k01, 2009-08-08T03:18Z

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

Permalänk: https://www.webforum.nu/p/2198112

## #6 — LarsG, 2009-08-08T09:22Z

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.

Permalänk: https://www.webforum.nu/p/2198117

## #7 — annasmurf, 2009-08-10T05:01Z

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

Permalänk: https://www.webforum.nu/p/2198208

## #8 — annasmurf, 2009-08-10T05:06Z

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

Permalänk: https://www.webforum.nu/p/2198209

## #9 — LarsG, 2009-08-10T16:32Z

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.

Permalänk: https://www.webforum.nu/p/2198276

## #10 — annasmurf, 2009-08-11T04:35Z

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...

Permalänk: https://www.webforum.nu/p/2198307

## #11 — LarsG, 2009-08-11T16:47Z

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?

Permalänk: https://www.webforum.nu/p/2198360

## #12 — annasmurf, 2009-08-12T04:29Z

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

Permalänk: https://www.webforum.nu/p/2198405

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/179690-triggers-sql
