[Triggers] value ophalen uit statement probleem

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • naruto
  • Registratie: Augustus 2001
  • Laatst online: 16-08-2020
Hoi Tweakers,


Ik zit met het volgende probleem, hopelijk kunnen jullie mij hierbij helpen.
Het gaat om het volgende:

Voor een bestaande database heb ik een extra tabel aangemaakt. Deze tabel legt vast wanneer een gebruiker een specifieke record heeft gelockt. Voor elke update moet er gecheckt worden of een gebruiker toegang heeft tot een record (er moet dus gekeken worden naar de tabel waar alle locks zijn vastgelegd). Voor dit probleem wil ik gebruik gaan maken van triggers.

Hieronder zal ik een voorbeeld geven:

code:
1
2
3
4
-- update statement binnen een stored procedure
update Order
set variable1='some value'
where Order.orderId= @orderId --@orderId is een van de input parameter


voordat het bovenstaande update statement wordt uitgevoerd moet er gecheckt worden of een bepaalde gebruiker het bovenstaande statement uit kan voeren op de record waar orderId is gelijk aan @orderId.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TRIGGER LockTrigger
on Order
FOR INSTEAD OF UPDATE
AS    
    begin tran
        if EXISTS (select * from LockTable where fulfilmentordernumber=@fulfilmentOrderNumber )  begin
         -- Abort
        end

if NOT EXISTS (select * from LockTable where fulfilmentordernumber=@fulfilmentOrderNumber )  begin
         -- insert record into LockingTable
        end

    commit tran
    
GO


Ik vraag mij of of dit mogelijk is? Zo ja kunnen jullie een voorbeeld geven hoe ik dit kan bereiken?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17-07 20:38
Zo te zien gaat het hier om Sql Server...

In SQL Server heb je in triggers de beschikking over de temporary tables new en deleted.
In deze tabellen zitten de records met respectievelijk hun nieuwe waardes en oude waardes bij een UPDATE. (Bij een INSERT statement zit er enkel info in de new table, bij een DELETE enkel in de deleted tables, en bij een UPDATE dus in beide).

Je kan dus in je trigger van die tabellen gebruik maken .... Hou er wel rekening mee dat er meer dan één record in zo'n new / deleted tabel kan zitten. (Als je UPDATE stment bv over meerdere records gaat)

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:27

TeeDee

CQB 241

Je kan afaik toch ook gebruik maken van de ingebouwde Lock features in MS SQL?
b schreef op maandag 30 oktober 2006 @ 10:31:
[...]


Dat klopt. Hiervoor heb ik oa gekeken naar row version etc. Maar de requirement is dat wanneer een gebruiker rechten heeft gekregen om een bepaalde record te kunnen updaten dat niemand anders deze record mag update (maar hij mag hem wel ophalen en bekijken). Om dit te kunnen bereiken moet ik voor elke update statement gaan checken of dit mogelijk is.
Okay. De requirement had ik niet helemaal door ;)

[ Voor 76% gewijzigd door TeeDee op 30-10-2006 10:34 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • naruto
  • Registratie: Augustus 2001
  • Laatst online: 16-08-2020
TeeDee schreef op maandag 30 oktober 2006 @ 10:25:
Je kan afaik toch ook gebruik maken van de ingebouwde Lock features in MS SQL?
Dat klopt. Hiervoor heb ik oa gekeken naar row version etc. Maar de requirement is dat wanneer een gebruiker rechten heeft gekregen om een bepaalde record te kunnen updaten dat niemand anders deze record mag update (maar hij mag hem wel ophalen en bekijken). Om dit te kunnen bereiken moet ik voor elke update statement gaan checken of dit mogelijk is.

Acties:
  • 0 Henk 'm!

  • naruto
  • Registratie: Augustus 2001
  • Laatst online: 16-08-2020
whoami schreef op maandag 30 oktober 2006 @ 10:24:
Zo te zien gaat het hier om Sql Server...

In SQL Server heb je in triggers de beschikking over de temporary tables new en deleted.
In deze tabellen zitten de records met respectievelijk hun nieuwe waardes en oude waardes bij een UPDATE. (Bij een INSERT statement zit er enkel info in de new table, bij een DELETE enkel in de deleted tables, en bij een UPDATE dus in beide).

Je kan dus in je trigger van die tabellen gebruik maken .... Hou er wel rekening mee dat er meer dan één record in zo'n new / deleted tabel kan zitten. (Als je UPDATE stment bv over meerdere records gaat)
bedankt voor de informatie.

Is het misschien ook mogelijk om informatie op te vragen (bijvoorbeeld een input parameter van een stored procedure)? bijvoorbeeld de order tabel bevat geen colomn gebruiker (deze bevindt zich in de lock tabel). De gebruiker wordt meegegeven aan de stored procedure. nou will ik dus gebruik maken van de gebruiker parameter.Is dit mogelijk?