将URL包含变量的嵌入链接添加到通过SQL创建的HTML表中



我目前正在创建一个SQL Server作业,如果表中有新信息,它将每隔x分钟发送电子邮件。这些电子邮件包含桌子上的信息,以及一个超链接到我们的一个网站。我试图嵌入超链接,这样更容易看到,但问题是,链接需要是动态的。(url.com/thing/(data from a table))

这是目前为止我写的最重要的代码

SET @tableHTML =  
N'
<body>
<H3>table header</H3>
</body> 
<table class="tg">
<table border="1">
<th>Link column header</th>' +
CAST((Select
td = '<a href="url.com/'+CAST(t.id AS varchar)+'">embedded link</a>'
from (
select
distinct
tn.id as id

from database.tableName as tn

where
tn.id is not null
) as t
FOR XML PATH('tr'), TYPE 
) AS NVARCHAR(MAX) ) +
N'</table>' ;

和发送邮件的方法:

EXEC msdb.dbo.sp_send_dbmail 
@recipients= @listOfRecipients,
@subject = @emailSubject,
@body = @tableHTML,
@body_format = 'HTML' ;

使用我现有的代码,我在发送的电子邮件中得到'<a href="url.com/t.id">embedded link</a>'的输出,而不是我的目标:'嵌入式链接'

过去有人在这方面运气好吗?

问题是td只是一个字符串,所以它被放在引号""内。您可以将其强制转换为xml,但是仅仅正确地生成XML节点要容易得多。

SET @tableHTML = N'
<body>
<H3>table header</H3>
</body> 
<table class="tg">
<table border="1">
<th>Link column header</th>' +
(SELECT
[td/a/@href] = CONCAT('url.com/', t.id)
[td/a/text()] = 'embedded link'
FROM database.tableName as tn
WHERE tn.id IS NOT NULL
GROUP BY
tn.id
FOR XML PATH('tr')
) +
N'
</table>
</table>
';

如果你使用CONCAT,也没有必要强制转换int,如果你删除, TYPE,那么你也不需要强制转换xml,因为它只返回nvarchar

相关内容

  • 没有找到相关文章

最新更新