HTML 仅使用 FOR XML PATH 和 sp_send_dbmail 部分应用格式
HTML formatting only being partially applied using FOR XML PATH and sp_send_dbmail
我有一个 SP 可以识别和删除不再需要的旧数据库信息,编译已删除帐户的列表。
我正在发送一封包含这些帐户列表的电子邮件,但由于某种原因,HTML 格式仅应用于邮件正文的一部分,任何人都可以提供 reason/solution 这个问题?
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 />
如何成功地 "applied" 在 FOR XML PATH...
之外的区域,但在 FOR XML PATH...
之内,被写成文字。
任何人对此有任何经验and/or知道我需要做什么来补救吗?
你应该使用 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()
可以防止这种情况发生。
我有一个 SP 可以识别和删除不再需要的旧数据库信息,编译已删除帐户的列表。
我正在发送一封包含这些帐户列表的电子邮件,但由于某种原因,HTML 格式仅应用于邮件正文的一部分,任何人都可以提供 reason/solution 这个问题?
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 />
如何成功地 "applied" 在 FOR XML PATH...
之外的区域,但在 FOR XML PATH...
之内,被写成文字。
任何人对此有任何经验and/or知道我需要做什么来补救吗?
你应该使用 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()
可以防止这种情况发生。