|
| MS-SQL 2000: Hjælp til trigger Fra : Morten Snedker |
Dato : 05-12-05 16:39 |
|
Det er vist nok meget simpelt, bare ikke for mig:
To felter, Dato og Bruger.
Jeg vil gerne forhindre, med en trigger, at feltet dato bliver
opdateret, hvis Bruger <> "Morten".
Jeg har kigget på INSTEAD OF, men er det ikke kun INSERT den virker
på?
Ovenstående er simplificeret for eksemplets skyld. Rettigheder på
kolonne-niveau er ikke en option.
mvh /Snedker
---
| |
Kristian Damm Jensen (05-12-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 05-12-05 22:24 |
|
Morten Snedker wrote:
> Det er vist nok meget simpelt, bare ikke for mig:
>
> To felter, Dato og Bruger.
>
> Jeg vil gerne forhindre, med en trigger, at feltet dato bliver
> opdateret, hvis Bruger <> "Morten".
>
Det fremgår ikke, hvad der er nøglen i din relation. Jeg vil antage,
at det *ikke* er bruger, da øvelsen ellers bliver endnu nemmere. Lad
os i stedet kalde nøglen n.
if exists
(select * from inserted i join deleted d on i.n = d.n
where d.bruger = <> 'Morten' and i.dato <> d.dato)
begin
raiserror ...
...
end
VH
Kristian Damm Jensen
| |
Morten Snedker (06-12-2005)
| Kommentar Fra : Morten Snedker |
Dato : 06-12-05 12:48 |
|
On 5 Dec 2005 13:24:24 -0800, "Kristian Damm Jensen"
<kristiandamm@gmail.com> wrote:
>Det fremgår ikke, hvad der er nøglen i din relation. Jeg vil antage,
>at det *ikke* er bruger, da øvelsen ellers bliver endnu nemmere. Lad
>os i stedet kalde nøglen n.
>
>if exists
> (select * from inserted i join deleted d on i.n = d.n
> where d.bruger = <> 'Morten' and i.dato <> d.dato)
>begin
> raiserror ...
> ...
>end
Først og fremmest tak for input.
Jeg kan godt se fidusen i ovenestående, men jeg er lidt i tvivl om
hvor og hvordan.
Hvis nu ovenstående er en del af en UPDATE-trigger, hvordan annullerer
jeg så opdateringen. _Er_ den gennemført, eller er den ved at blive
gennemført.
Jeg tænker det er raiseerror-delen jeg er tvivl om..?
mvh /Snedker
---
| |
Peter Lykkegaard (06-12-2005)
| Kommentar Fra : Peter Lykkegaard |
Dato : 06-12-05 19:17 |
|
"Morten Snedker" wrote
> Hvis nu ovenstående er en del af en UPDATE-trigger, hvordan annullerer
> jeg så opdateringen. _Er_ den gennemført, eller er den ved at blive
> gennemført.
>
> Jeg tænker det er raiseerror-delen jeg er tvivl om..?
>
Der er en transaction aktiveret
Du bruger RaiseError samt Rollback Transaction
Books OnLine har nogle udmærkede eksempler under "Create Trigger"
- PEter
| |
Morten Snedker (07-12-2005)
| Kommentar Fra : Morten Snedker |
Dato : 07-12-05 14:47 |
|
On Tue, 6 Dec 2005 19:16:41 +0100, "Peter Lykkegaard"
<plykkegaard@gmail.com> wrote:
>Der er en transaction aktiveret
>Du bruger RaiseError samt Rollback Transaction
Ja, tænk hvor jeg sloges med RaiseError. Kompilering af min trigger
insisterede på, at det bare ikke var ok.
Det var så fordi MS har valgt at spare en vokal væk, da de skulle lave
funktionen RAISERROR....!
Ja ja, den blev ikke fremhævet med blå skrift, og det ku' jeg jo bare
ha' kigget ordentlig efter...men altså, ik'...
mvh /Snedker
---
| |
|
|