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