ms sql html 中的 p 标签与@variable

p tag in ms sql html with @variable

我有一个 SQL 以 html 格式写生日电子邮件...它工作正常,但如果我想用变量填充字段,它就不起作用。

例如 map p 标签:

<p style="margin: 0; color: #f07d00; font-family: Open Sans, arial, sans-serif; font-size: 12px; font-weight: bold; text-transform: uppercase;">
@DISPONAME
</p>

因此,在电子邮件中显示@DISPONAME,在html 开始之前设置在sql 顶部的变量。 现在我想像“+ @DISPONAME +”一样激活@DISPONAME,但它不起作用,电子邮件将创建到此为止,其余部分为空白,@DISPONAME 行也未显示...

怎么了?如何正确插入?

谢谢!

埃里克

编辑: SQL html 开始前的命令...

While (select top 1 id from dbo.Geburtstag_aktiv where send_date is NULL) is not NULL Begin DECLARE @ID int, @DISPONENT nvarchar(100), @DISPONAME nvarchar(100), @EMAILMA nvarchar(100), @EMAILDISPO nvarchar(50), @copy nvarchar(50) DECLARE @MOBIL as nvarchar(100), @DURCHWAHL as nvarchar(100), @BRIEFANREDE as nvarchar(100), @MABRIEFANREDE as nvarchar(100) DECLARE @sub nvarchar(255), @tableHTML nvarchar(MAX), @HomeServerUrl nvarchar(100), @BEDIENERTEXT as nvarchar(100), @BEDIENERFAX as nvarchar(100), @BEDIENERBERUF as nvarchar(100) SET @ID = (select top 1 id from dbo.Geburtstag_aktiv where send_date is NULL) SET @DISPONENT = (select LTRIM(RTRIM(DISPONENT)) from dbo.Geburtstag_aktiv where ID = @ID) SET @DISPONAME = (select LTRIM(RTRIM(DISPONAME)) from dbo.Geburtstag_aktiv where ID = @ID) SET @EMAILMA = (select LTRIM(RTRIM(EMAILMA)) from dbo.Geburtstag_aktiv where ID = @ID) SET @EMAILDISPO = (select LTRIM(RTRIM(EMAILDISPO)) from dbo.Geburtstag_aktiv where ID = @ID) SET @BRIEFANREDE = (select LTRIM(RTRIM(BRIEFANREDE)) from dbo.Geburtstag_aktiv where ID = @ID) SET @copy = copy SET @MOBIL = (select LTRIM(RTRIM(MOBIL)) from dbo.Geburtstag_aktiv where ID = @ID) SET @DURCHWAHL = (select LTRIM(RTRIM(DURCHWAHL)) from dbo.Geburtstag_aktiv where ID = @ID) SET @sub = 'Herzlichen Glückwunsch zum Geburtstag!' SET @HomeServerUrl = (select single_value from [dbo].[tb_admin_single_value] where single_value_desc = 'HomeServerUrl') SET @BEDIENERTEXT = (select LTRIM(RTRIM(BEDIENERTEXT2)) from dbo.Geburtstag_aktiv where ID = @ID) SET @BEDIENERFAX = (select LTRIM(RTRIM(FAX)) from dbo.Geburtstag_aktiv where ID = @ID) SET @BEDIENERBERUF = (select LTRIM(RTRIM(DISPOBERUF)) from dbo.Geburtstag_aktiv where ID = @ID) SET @MABRIEFANREDE = (select LTRIM(RTRIM(BRIEFANREDE)) from dbo.Geburtstag_aktiv where ID = @ID)

编辑: 发送电子邮件的代码:

SET @tableHTML = 
'<html>'
Html code
</html>';

EXEC msdb.dbo.sp_send_dbmail 

@recipients = @EMAILMA, 

@profile_name = 'SERVER2',

@subject = @sub,

@body = @tableHTML,

@body_format = 'HTML'

编辑:这里有一些 html 代码,不适用于 @variable

<tr>
<td>
<a href="callto:035100000@DURCHWAHL" style="margin: 0; color: #000; font-family: Open Sans, arial, sans-serif; font-size: 10px; text-decoration: none;">
Tel.: 0351 / 00000-@DURCHWAHL
</a>
</td>
</tr>

首先:您应该永远不要在字符串级别创建 (X)HTML 或 XML!

想象一下

SELECT '<p>' + 'This is bad & dangerous -->  don''t do it!' + '</p>';

由于 &> 这将导致无效 XML/HTML!

像这样尝试

SELECT 'margin: 0; color: #f07d00; font-family: Open Sans, arial, sans-serif; font-size: 12px; font-weight: bold; text-transform: uppercase;' AS [@style]
      ,'Some Content'
FOR XML PATH('p');

第二点是:

email will be created till this and the rest is blank

如果变量因任何原因为 NULL,连接将失败。

SELECT 'Something' + NULL; --returns NULL...

我上面展示的方法在这里更宽容。只需使用 NULL 尝试一下,您仍然会得到有效答案:

SELECT 'margin: 0; color: #f07d00; font-family: Open Sans, arial, sans-serif; font-size: 12px; font-weight: bold; text-transform: uppercase;' AS [@style]
      ,NULL
FOR XML PATH('p');

顺便说一句:Schönen Gruß nach Dresden,ich war da gerade :-D

更新只是一个提示:

您的查询一遍又一遍地调用相同的 table 值函数。使用这样的东西应该容易得多

SELECT @DISPONENT = LTRIM(RTRIM(DISPONENT)) 
      ,@DISPONAME = LTRIM(RTRIM(DISPONAME))
      ,@EMAILMA   = LTRIM(RTRIM(EMAILMA))
      --more variables
FROM dbo.Geburtstag_aktiv where ID = @ID;