【问题标题】:p tag in ms sql html with @variable带有@variable的ms sql html中的p标签
【发布时间】:2017-04-26 12:50:40
【问题描述】:

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

例如地图标签:

<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 行也未显示...

怎么了?如何正确插入?

谢谢!

埃里克

编辑: html 启动前的 SQL 命令...

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>

【问题讨论】:

  • 试试@@DISPONAME
  • @@DISPONAME 或 '+ @@DISPONAME +' ?两者都不起作用
  • 可以添加SQL语句吗?很难修复问题中未包含的代码。
  • @destination-data 代码已发布
  • 您的代码没有显示标签...尝试缩进至少 4 个空格...

标签: html sql sql-server tags html-email


【解决方案1】:

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

想象一下

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

由于&amp; 和&gt; 这将导致无效的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');

顺便说一句:Schönen Gruß nach Dresden, 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;

【讨论】:

  • danke für den Gruß ;-) 感谢您的回答...电子邮件中有很多表格和行等等。我该如何定义它?而且我不明白在哪里插入您发布的代码... SELECT 'margin: 0;颜色:#f07d00; font-family:开放式无衬线体、宋体、无衬线体;字体大小:12px;字体粗细:粗体;文本转换:大写;' AS [@style] ,'一些内容' FOR XML PATH ('p);正确的位置在哪里?你有一个小例子吗?谢谢!
  • @SamEnbank,嗯...在您的问题中,前几行表明您正在尝试创建类似&lt;p style="blah"&gt;more blah&lt;/p&gt; 的东西。我对FOR XML PATH('p') 的建议正好提供了这个......我不知道从给定的信息中,你需要这个......
  • 是的,你是对的...我尝试创建类似

    more blah

    的东西。您还需要什么其他信息?谢谢
  • @SamEnbank 请不要将代码放入 cmets... 这很难阅读。而是使用问题的编辑选项将其放在那里。尽量减少你的代码!拿走所有更多相同的东西,然后指向问题所在的地方。您在上面提供的代码不是您创建任何 HTML 的地方
  • 对不起,改变了我的评论......你有一个简短的例子,如何像我一样构建 html 代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多