0

我正在尝试从相同的数据创建一条简短的 SMS 消息和一封完整格式的电子邮件。出于文本电子邮件的目的,如何将 2 行从 at 转换为 SQL 字符串。

我的表中只有 4 行,我使用自己的标准为它们分配“好”或“坏”的评级。完全格式化的电子邮件将显示所有四行,但 SMS 只需要显示坏的。

我可能会使用 sp_send_dbmail 发送两封电子邮件,有些人可能希望使用 Outlook 将 SMS 发送到他们的手机而不是 SMS 文本,而其他人将在他们的手机上使用不同的警报系统并在他们的设备上阅读电子邮件。

这是我想做的一个例子。@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 
4

1 回答 1

1

您可以声明一个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为,并且您必须根据自己的喜好调整格式,但这应该可以。

于 2012-08-27T20:31:35.670 回答