我有一个SP,用于识别和删除不再需要的旧数据库信息,编译已删除的帐户列表。
我发送的电子邮件中包含这些帐户的列表,但出于某种原因,HTML格式仅应用于邮件正文的某个部分,是否有人可以提供此问题的原因/解决方案?< / p>
DECLARE @table TABLE (acct varchar(4))
INSERT INTO @table (acct)
SELECT 1234
UNION ALL SELECT 2345
UNION ALL SELECT 3456
UNION ALL SELECT 4567
DECLARE @accountList VARCHAR(MAX)
SET @accountList =
STUFF((SELECT ' <br /> ' + acct FROM @table FOR XML PATH('')),1,1,'')
DECLARE @mailBody VARCHAR(MAX)
SELECT @mailBody = 'The job ran successfully.' +
'<br /><br />Account List Purged: <br />' + @accountList
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Default',
@recipients = 'email@email.email',
@subject = 'Data Purge [Accounts Purged]',
@body_format = 'html',
@body = @mailBody
以下是exec msdb.dbo.sp_send_dbmail
注意<br />
成功&#34;如何应用&#34;对于FOR XML PATH...
以外的区域,但在其中,则写为文字。
任何人都有这方面的经验和/或知道我需要做些什么来修复?
答案 0 :(得分:1)
您应该使用FOR XML PATH(''), type).value('.[1]','nvarchar(max)')
。
SET @accountList =
STUFF((
SELECT ' <br /> ' + acct
FROM @table FOR XML PATH(''), type).value('.[1]','nvarchar(max)'),
1, 1, '')
打印:
<br /> 1234 <br /> 2345 <br /> 3456 <br /> 4567
您的查询打印时:
<br /> 1234 <br /> 2345 <br /> 3456 <br /> 4567
FOR XML PATH('')
在XML授权方面存在问题,因为它会将<
,>
和其他一些特殊字符转换为XML安全实体。使用PATH, TYPE).value()
可以防止这种情况发生。