Leggere una tabella sqlserver e mandare mail

giovedì 12 gennaio 2006 - 10.45

rossana Profilo | Newbie

ho sql mail attivato e una tabella di log da leggere. se il campo level di questa tabella è "fatal" devo riuscire a mandarmi una mail il cui testo è contenuto nel campo "message" della stessa tabella di log.

qualcuno puo' aiutarmi con una query ad hoc???

grazie

lbenaglia Profilo | Guru

Ciao Rossana,

> se il campo level di questa tabella è "fatal" devo riuscire a mandarmi una mail il cui testo è contenuto nel
> campo "message" della stessa tabella di log.

Io risolverei la questione definendo un cursore che recupera il messaggio per tutte quelle righe che soddisfano il criterio di ricerca.
Guarda il seguente esempio:

USE tempdb;
GO

/* Definisco la tabella dbo.Logs */
CREATE TABLE dbo.Logs(
LogID int NOT NULL IDENTITY PRIMARY KEY,
Message varchar(12) NOT NULL,
[Level] varchar(10) NOT NULL
)
GO

/* La popolo */
INSERT dbo.Logs VALUES('Messaggio 1', 'normal');
INSERT dbo.Logs VALUES('Messaggio 2', 'warning');
INSERT dbo.Logs VALUES('Messaggio 3', 'fatal');
INSERT dbo.Logs VALUES('Messaggio 4', 'fatal');
GO

/* Dischiaro la variabile locale @Message */
DECLARE @Message varchar(12)

/* Dichiaro il cursore */
DECLARE curSendMail CURSOR FOR
SELECT Message
FROM dbo.Logs
WHERE [Level] = 'fatal'

/* Apro il cursore */
OPEN curSendMail

/* Prima lettura */
FETCH NEXT FROM curSendMail
INTO @Message

/* Loop */
WHILE @@FETCH_STATUS = 0
BEGIN
/* Invio la mail */
EXEC xp_sendmail 'Lorenzo', @Message

/* Letture successive */
FETCH NEXT FROM curSendMail
INTO @Message
END

/* Dealloco e chiudo il cursore */
CLOSE curSendMail
DEALLOCATE curSendMail
GO

/* Pulizia */
DROP TABLE dbo.Logs

Per ulteriori info siamo qua :-)

Ciao!

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

rossana Profilo | Newbie

intanto grazie....poi alcune domande.
come mai hai definito una tabella su tempdb?? io ho già la mia sul mio db che è piena e popolata. posso usare lo stesso metodo anche su una tabella esistente vero?
inoltre... la xp_sendmail che è definita solo sul db master... posso usarla comunque anche sugli altri db?? i parametri che devo passarle quali sono?


lbenaglia Profilo | Guru

> come mai hai definito una tabella su tempdb?? io ho già la mia sul mio db che è piena e popolata.
> posso usare lo stesso metodo anche su una tabella esistente vero?
Certo. Ho definito la tabella nel tempdb perché è un db che sicuramente hai anche tu e quindi puoi provare il mio esempio (modificando opportunamente il recipient).

> inoltre... la xp_sendmail che è definita solo sul db master...
> posso usarla comunque anche sugli altri db??
Ovviamente si, avendo cura di specificare il database e l'owner: EXEC master.dbo.xp_sendmail

> i parametri che devo passarle quali sono?
Almeno il destinatario ed il messaggio.
La documentazione completa la trovi sui Books Online:

"xp_sendmail"
http://msdn.microsoft.com/library/en-us/tsqlref/ts_xp_aa-sz_6hbg.asp

Ciao!

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

rossana Profilo | Newbie

grazie
stavo provando e ci ero "mezza"arrivata anche da sola....

cmq grazie davvero.

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