p标签在MS SQL HTML中使用@Variable



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

例如ma 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的电子邮件中,设置在SQL顶部的变量,html启动了。现在,我想激活@disponame,例如' @disponame ',并且它不起作用,直到此之前,该电子邮件将在此之前创建,其余的是空白,并且@disponame行也没有显示...

怎么了?我该如何正确插入?

谢谢!

erik

编辑:html开始之前的sql命令...

while(从dbo.geburtstag_aktiv中选择send_date为null的最高1 ID(不是null begin 声明@id int,@disponent nvarchar(100(,@disponame nvarchar(100(,@emailma nvarchar(100(,@emaildispo nvarchar(50(,@copy nvarchar(50( 将@mobil称为nvarchar(100(,@durchwahl为nvarchar(100(,@briefanrede为nvarchar(100(,@mabriefanrede as nvarchar(100( 声明@sub nvarchar(255(,@TableHtml nvarchar(Max(,@Homeserverurl nvarchar(100(,@bedienertext as nvarchar(100(,@bedienerfax as nvarchar(100( 设置@id =(从dbo.geburtstag_aktiv中选择send_date为null的顶级1 ID( set @disponent =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(discon((,其中id = @id( set @disponame =(从dbo.geburtstag_aktiv中select ltrim(rtrim(disponame((中,id = @id( 设置@emailma =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(emailma((其中id = @id( 设置@emaildispo =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(emaildispo((,id = @id( set @briefanrede =(从dbo.geburtstag_aktiv中select ltrim(rtrim(hiveanrede((,其中id = @id( 设置@copy =复制 set @mobil =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(mobil((其中id = @id( set @durchwahl =(select ltrim(rtrim(durchwahl((从dbo.geburtstag_aktiv where id = @id( 设置@sub ='HerzlichenGlückwunschZum Geburtstag!' set @homeserverurl =(从[dbo]中选择single_value。 set @bedienertext =(从dbo.geburtstag_aktiv中select ltrim(rtrim(bedienertext2((,其中id = @id( set @bedienerfax =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(fax((其中id = @id( set @bedienerberuf =(从dbo.geburtstag_aktiv中选择ltrim(rtrim(dispoberuf((,其中id = @id( set @mabriefanrede =(从dbo.geburtstag_aktiv中select ltrim(rtrim(hiveanrede((中,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');

第二点是:

将创建电子邮件,直到此之前,其余的为空白

如果由于任何原因是变量为 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');

btw:SchönenGrußNachDresden,ICH WAR DA GERADE:D

更新一个提示:

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

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

最新更新