【发布时间】:2019-08-02 04:03:06
【问题描述】:
我使用的是 SQL Server 2014 和 SSIS。
我的场景:我有一个检查文件的 SSIS 项目 - 路径存储在名为 FilePath 的包参数中。
如果没有找到文件,它会触发 SQL Server 存储过程 (SP_EmailNoFiles),然后发送电子邮件(由于公司网络策略,SSIS 服务器无法中继电子邮件,因此我在SQL Server 发送电子邮件)。
我的问题:是否可以将包参数FilePath 的值传递给SP_EmailNoFiles 存储过程,以便它可以出现在正文中?
我执行的步骤:
- 创建“执行 SQL 任务”以在没有文件时调用
SP_EmailNoFiles - 在参数映射中,我添加了变量
$Package::FilePath,数据类型=NVARCHAR,参数名称=0 - 在
SP_EmailNoFiles存储过程中,我声明了FilePath并将值设置为? - 但是,SQL Server 不喜欢这样并声明:
'?' 附近的语法不正确。
这是我的代码:
DECLARE @ProfileName NVARCHAR(50)
DECLARE @Recipients NVARCHAR(250)
DECLARE @Subject NVARCHAR(255)
DECLARE @FilePath NVARCHAR(255)
SET @ProfileName = 'zzzzzz'
SET @Recipients = 'me@test.com'
SET @Subject = 'source file missing'
SET @FilePath = ?
-- Build Email Body ---
DECLARE @Body NVARCHAR(MAX)
SET @Body =
'<html>
<body>
<table class="outer">
<tr>
<td class="header">
<h3>' + @Subject + '</h3>
blah blah blah no files detected <br>
Check the folder path. ' + @FilePath + '<br><br>
<br>
</td>
</tr>
<tr>
<td>' +
'<br>
</td>
</tr>
</body>
</html>'
-- Send Mail -----
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @ProfileName,
@recipients = @Recipients,
@body = @Body,
@subject = @Subject,
@body_format = 'HTML';
我想要的可能吗?回顾一下,我想将 FilePath 的值传递到在存储过程 SP_EmailNoFiles 中创建的 HTML 电子邮件的正文中。
谢谢。
【问题讨论】:
-
附注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
@marc_s 感谢您的提示!没有下划线的 sp 呢?
-
问题出在 只是
sp_前缀 - 其他都可以 - 包括sp(没有下划线) -
@marc_s 好的,谢谢阿吉安
标签: html sql-server ssis