我正试图用相同的数据创建一条短短信和一封完整格式的电子邮件。如何将at表中的2行转换为SQL字符串以用于文本电子邮件。
我的表中只有4行,我使用自己的标准为它们指定了"好"或"坏"的评级。完全格式化的电子邮件将显示所有四行,但短信只需要显示坏的一行。
我可能会使用sp_send_dbmail发送两封电子邮件,有些人可能想使用Outlook将短信发送到他们的手机而不是短信文本,而另一些人则会在他们的手机上使用不同的警报系统,只需在设备上读取电子邮件。
下面是我想做的一个例子。@htmlEmailText运行良好,因为它使用了"FOR XML"子句。
if @format = 'EMAIL'
begin
SET @SMSEmailText =
'BizTalk Feed Alert ' +
CAST ((
SELECT Airline, 'Feed=' + ST.Feed, 'MinutesSinceLastMessage=' + MinutesSinceLastMessage
where Rating = 'BAD')
) AS NVARCHAR(MAX) )
;
SET @htmlEmailText =
N'<H1>BizTalk Feed Alert</H1>' +
N'<table border="1">' +
N'<tr>' +
N'<th>Rating</th>' +
N'<th>Airline</th>' +
N'<th>Feed</th>' +
N'<th>MinutesSinceLastMessage</th>' +
N'<th>AlertMinutes</th>' +
N'<th>LocalDateTimeLastMsgRcvd</th>' +
N'<th>CountMessageInLastHour</th>' +
N'<th>AvgCountPerSameHour</th>' +
CAST ( ( SELECT td = Rating, '',
td = Airline, '',
td = ST.Feed, '',
td = MinutesSinceLastMessage, '',
td = AlertMinutes, '',
td = LocalDateTimeLastMsgRcvd, '',
td = CountMessageInLastHour, '',
td = AvgCountPerSameHour, ''
from @StatsTable ST
left outer join @CountTable CT on ST.Feed = CT.Feed
left outer join @AvgTable AT on ST.Feed = AT.Feed
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>'
;
end
您可以声明一个nvarchar(max)
变量来保存行,然后像这样连接它们:
DECLARE @BadText nvarchar(max)
SET @BadText = ''
SELECT @BadText = @BadText + Airline + '; Feed=' + ST.Feed + '; ' +
'MinutesSinceLastMessage=' + MinutesSinceLastMessage
WHERE Rating = 'BAD'
SET @SMSEmailText =
'BizTalk Feed Alert ' + @BadText
现在,您还需要将任何ints
/floats
强制转换为nvarchars
,并且您必须根据自己的喜好调整格式,但这应该可以做到。