Creazione di trigger sql server 2005

mercoledì 12 novembre 2008 - 09.54

mauramo33 Profilo | Newbie

buongiorno a tutti,
avendo la necessità di dover tenere traccia della data di ultimo aggiornamento dei record di una tabella ho creato un semplicissimo trigger:

ALTER TRIGGER [dbo].[lastupdate]
ON [dbo].[CallCenter]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
update dbo.callcenter set dataAggiornamento = getdate() from inserted
where inserted.idChiamata = dbo.callcenter.idChiamata
END

e questo funziona tranquillamente. il problema pero' sorge quando io effetto delle operazioni da (admin passatemi il termine) attraverso il Microsoft SQL Server Management Studio il trigger fa il suo dovere e mi aggiorna il campo. cosa che in questo caso io non vorrei pero'. Mi chiedevo se era possibile intercettare la mia login di accesso al MSSMS e di fare in modo che quando io entro questo trigger non funzioni.
e' possibile una cosa del genere?

grazie mille,
Maurizio

lbenaglia Profilo | Guru

>il problema pero' sorge quando
>io effetto delle operazioni da (admin passatemi il termine) attraverso
>il Microsoft SQL Server Management Studio il trigger fa il suo
>dovere e mi aggiorna il campo. cosa che in questo caso io non
>vorrei pero'. Mi chiedevo se era possibile intercettare la mia
>login di accesso al MSSMS e di fare in modo che quando io entro
>questo trigger non funzioni.
>e' possibile una cosa del genere?

Ciao Maurizio,

si, certo, puoi intercettare sia la login che il nome dell'applicazione client utilizzando rispettivamente le funzioni SYSTEM_USER() e APP_NAME()
Puoi testare questi valori con una IF e procedere o meno con l'UPDATE.

>grazie mille,
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

mauramo33 Profilo | Newbie

Grazie,

DECLARE @sys_usr char(30);
SET @sys_usr = SYSTEM_USER;


ALTER TRIGGER [dbo].[lastupdate]
ON [dbo].[CallCenter]
AFTER UPDATE
AS
BEGIN
IF @sys_usr <> "MLK\a.maurizio" THEN
SET NOCOUNT ON;
update dbo.callcenter set dataAggiornamento = getdate() from inserted
where inserted.idChiamata = dbo.callcenter.idChiamata
END IF
END

assumendo che la mia utenza MLK\a.maurizio bypassi il trigger cosi ?
grazie,

mauramo33 Profilo | Newbie

Salve, ho risolto, grazie di tutto.
Per la cronaca ecco l'esatto trigger inserito

USE [dbDati]
GO
/****** Oggetto: Trigger [dbo].[lastupdate] Data script: 11/12/2008 09:51:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[lastupdate]
ON [dbo].[CallCenter]
AFTER UPDATE
AS
BEGIN
DECLARE @sys_usr char(50)
SET @sys_usr = SYSTEM_USER

IF @sys_usr = 'CMT-SERVER\IUSR_CMT-SERVER'
BEGIN
SET NOCOUNT ON;
UPDATE dbo.callcenter SET dataAggiornamento = GETDATE() from inserted
WHERE inserted.idChiamata = dbo.callcenter.idChiamata
END
END

lbenaglia Profilo | Guru

>IF @sys_usr = 'CMT-SERVER\IUSR_CMT-SERVER'
>BEGIN
> SET NOCOUNT ON;
> UPDATE dbo.callcenter SET dataAggiornamento = GETDATE()
> from inserted
> WHERE inserted.idChiamata = dbo.callcenter.idChiamata
>END

Questa IF restituisce True quando ti autentichi all'istanza con la login CMT-SERVER\IUSR_CMT-SERVER.
Tu non dovevi fare il contrario?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

mauramo33 Profilo | Newbie

si e' uguale :P
visto che tutti gli altri utenti ci si collegano attraverso un'interfaccia web con utente di IIS tanto vale controllare il loro di accesso e non il mio :P cosi io posso entrare sia come mia utenza come come utente sa :)

grazie cmq per la risposta ;)
Maurizio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5