Hi, ich habe irgendwie ein Brett vorm Kopf...
Ich habe mir extra ein Testszenario aufgebaut, so dass ich bei diesem einen Fehler zurück bekommen sollte und nix ist, der fügt munter Einträge ein.
Ich muss dazu sagen, dass es mein erster triger ist, den ich schreibe und jetzt möchte ich Euch fragen, ob ich irgendetwas übersehen oder nicht beachtet habe.
Vielen Dank für eure Mühe, maYer
Ich habe mir extra ein Testszenario aufgebaut, so dass ich bei diesem einen Fehler zurück bekommen sollte und nix ist, der fügt munter Einträge ein.
Ich muss dazu sagen, dass es mein erster triger ist, den ich schreibe und jetzt möchte ich Euch fragen, ob ich irgendetwas übersehen oder nicht beachtet habe.
Vielen Dank für eure Mühe, maYer
Code:
ALTER TRIGGER [TR_OBJECT_LOCKING_INSTEAD_OF_INSERT]
ON [OBJECT_LOCKING]
INSTEAD OF INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
/* Trigger um zu prüfen, ob ein Benutzer dieses Objekt
schon im Zugriff hat. Ist dies nicht der Fall,
kann das Objekt angelegt werden.*/
--Die Variablen declarieren.
DECLARE @USER int
DECLARE @OPERATION smallint
DECLARE @CLASS smallint
DECLARE @OBJECT int
--Die Variablen aus Inserted füllen.
SELECT
@USER=USER_OBJECT_ID,
@OPERATION=LOCK_TYPE,
@CLASS=OPER_CLASS_ID,
@OBJECT=OPER_CLASS_ID
FROM inserted
--Nachfragen, ob das Objekt von einem anderen Benutzer gesperrt wurde
IF EXISTS
(
SELECT * FROM OBJECT_LOCKING
WHERE OPER_CLASS_ID = @CLASS
AND OPER_OBJECT_ID = @OBJECT
AND USER_OBJECT_ID != @USER
)
BEGIN
--Abfragen, ob der Benutzer Administrationsrechte hat.
IF NOT EXISTS
(
SELECT * FROM USER_AUTH
WHERE USER_AUTH.USR_OBJECT_ID = @USER
AND USER_AUTH.OPERATION_ID = 15
)
BEGIN
--Abfragen, ob der Benutzer in einer Gruppe mit Administrationsrechten ist.
IF NOT EXISTS
(
SELECT * FROM USER_AUTH
INNER JOIN USER_GROUP
ON USER_GROUP.GRP_OBJECT_ID = USER_AUTH.GRP_OBJECT_ID
WHERE USER_GROUP.USR_OBJECT_ID = @USER
AND USER_AUTH.OPERATION_ID = 15
)
RAISERROR('Der Benutzer kann die Operation nicht ausführen, da ein anderer Benutzer das Objekt geblockt hat', --Fehlermeldung
15, --Schweregrad des Fehlers.
2) --Status. Dient zur Unterscheidung der selben Fehlermeldung an verschiedenen Stellen.
--WITH NOWAIT --Fehlermeldung soll sofort ausgegeben werden.
END
END
--Die Zeile in die Tabelle einfügen.
INSERT INTO OBJECT_LOCKING
(
OBJECT_ID,
CLASS_ID,
OPER_OBJECT_ID,
OPER_CLASS_ID,
LOCK_TYPE,
STATE,
CREATION_DATE,
USER_OBJECT_ID,
USER_ID_MOD,
MODIFICATION_DATE,
TDM_CTRL_CLASS_ID,
TDM_CTRL_OBJ_ID
)
SELECT
OBJECT_ID,
CLASS_ID,
OPER_OBJECT_ID,
OPER_CLASS_ID,
LOCK_TYPE,
STATE,
CREATION_DATE,
USER_OBJECT_ID,
USER_ID_MOD,
MODIFICATION_DATE,
TDM_CTRL_CLASS_ID,
TDM_CTRL_OBJ_ID
FROM
inserted
END