Email versenden

Mehr
5 Monate 1 Woche her #1892 von asu
asu erstellte das Thema Email versenden
Sollte mal die Notwendigkeit bestehen eine email aus dem SQL-Server direkt auch „in hübsch“ zu versenden, da gibt es durchaus Wege und Möglichkeiten. Um jetzt nicht Visual Studio mit der Excel REST API ins Spiel zu bringen oder die Reporting Services, man kann auch eine email vom SQL-Server sehr einfach versenden lassen mit einen HTML Table im Body. Hier ein kleines SQL-Beispiel das als Vorlage dienen kann, wenn man, wie ich, nicht mit HTML und XML auf Du und Du steht. Wie man am Bsp. des Betrag erkennt, muss man das Ziel (Währungsdarstellung rechtsbündig) aufteilen, indem man einen Teil im SQL Part erledigt mit FORMAT() und einen Teil ([td/@align] = 'right') als Attribut bei dem Tag im XML unterbringt.


/*****
Ein Datenbank E-Mail Konto muss auf dem jeweiligen SQL-Server unter VERWALTUNG eingerichtet sein!
*****/

    DECLARE @tableHTML nvarchar(max)

    SET @tableHTML = 
        N'<H3><font face="Tahoma" color="#1f66e5">Vorfallübersicht!</H3>' +
        N'<p><font face="Tahoma" color="#008080"><b>Zahlen des laufenden Monats.</b>' + 
        N'<table border="1" bordercolor="#D3D3D3" width="60%" summary="Finition de la page">' + --Begrenzt die Tabelle auf 60% der aktuellen Größe des Fensters
        N'<font face="Arial" color="black">' +
        N'<colgroup span="5" width="0*"></colgroup>' +
        N'<tr><th width=200 bgcolor="#1f66e5"><p><font color="#FFFFFF">Land</th>' +
        N'<th width=200 bgcolor="#1f66e5"><p><font color="#FFFFFF">Vorfalltyp</th>' +
        N'<th width=800 bgcolor="#1f66e5"><p><font color="#FFFFFF">Betrag</th>' +
        CAST ( (
				 SELECT
			td = dbo.Adressen.Ländercode ,       '',
			td = case dbo.GeschäftsvorfallArt.Typ
			when 120 then 'Wareneingang'
			when 200 then 'Ausgangsrechnung'
			end ,       '',
			[td/@align] = 'right',
			td  = format(round(SUM(dbo.GeschäftsVorfall.GesamtNetto),2),'C','de-de')  ,       ''
			FROM            dbo.GeschäftsVorfall INNER JOIN
                         dbo.GeschäftsvorfallArt ON dbo.GeschäftsVorfall.VorfallKürzel = dbo.GeschäftsvorfallArt.VorfallKürzel
						 INNER JOIN dbo. Adressen ON dbo. Adressen.KorrNr = dbo.GeschäftsVorfall.KorrNr
			WHERE        
			(dbo.GeschäftsvorfallArt.Typ = 200 OR dbo.GeschäftsvorfallArt.Typ = 120) 
			AND 
			(dbo.GeschäftsVorfall.Status = 'VBU' OR dbo.GeschäftsVorfall.Status = 'UEB')
			AND
			( left( dbo.GeschäftsVorfall.VorfallDatum,6) = left(convert(varchar(8),getdate(),112),6) )
			GROUP BY dbo.GeschäftsvorfallArt.Typ, dbo.Adressen.Ländercode
			order by dbo.GeschäftsvorfallArt.Typ, dbo.Adressen.Ländercode
	  FOR XML PATH('tr'), TYPE ) 
	  AS NVARCHAR(MAX) 
	  ) +
        N'</table>'

		

    EXEC msdb.dbo.sp_send_dbmail
	@profile_name = 'Intern',
    @recipients = 'max@mustermann.de',
    @copy_recipients = 'hilde@musterfau.de',
    @subject = 'Tägliche Übersicht der verbuchten Vorfälle',
    @body = @tableHTML,
    @body_format = 'HTML'

"Wer Rechtschreibfehler findet, darf sie behalten."
Anhang:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.