我有一个以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;