我使用sp_send_dbmail
获取mailitem_id
作为输出。当我使用输出参数
它投掷以下错误而没有输出它工作正常。
错误:执行SQL任务]错误:执行查询" exec? = sp_send_dbmail @ profile_name = ?, @recipien ..."失败,出现以下错误:
由于编译错误,无法分析批次 可能的失败原因:查询问题," ResultSet"属性设置不正确,参数设置不正确或连接未正确建立。
查询:
exec ? = sp_send_dbmail @profile_name = ?, @recipients = ?,
@copy_recipients = ?, @subject = ?,
@body = ?, @importance = ?,
@body_format = ?@mailitem_id = ? OUT
@mailitem_id
是存储过程中的OUTPUT
参数,INT
类型的参数。
我尝试了不同的方法来传递输出参数但仍然得到相同的错误...是否因为传递输出参数无法获取数据类型不匹配或语法错误而失败..
请帮我解决问题..我在屏幕截图中添加了参数映射窗口。我在Short
的参数映射中尝试使用ULarge_integer
,Large_integer
和Long
类型代替mailitem_id
。
答案 0 :(得分:2)
可能是错误消息中描述的几个内容之一,或者所有内容。我将按照显示的顺序处理错误消息。
查询问题
EXEC @return_status = ...
语法时,必须使用@
符号定义T-SQL变量。该变量也必须声明,因此EXEC ?
只有在参数0
作为@return_value
等值传入时才合乎逻辑。@body_format = ?@mailitem_id
。@mailitem_id = ? OUT
不是此输出参数的正确语法,除非?
的参数位置被定义为脚本中声明的变量(类似于问题#1)。查询应该看起来像这样:
DECLARE @return_status INT, @mailitem_id INT;
EXEC @return_status = sp_send_dbmail @profile_name = ?, @recipients = ?,
@copy_recipients = ?, @subject = ?,
@body = ?, @importance = ?,
@body_format = ?, @mailitem_id = @mailitem_id OUTPUT
SELECT @return_status AS return_status, @mailitem_id AS mailitem_id;
有关执行此存储过程的一些示例,请参阅sp_send_dbmail
documentation。
“ResultSet”属性设置不正确
在执行SQL任务编辑器的常规标签中,ResultSet
组中Result Set
的值是多少?
选项包括:
None
- 查询返回无结果Single row
- 查询只返回一行Full result set
- 查询返回多行XML
- 查询以XML格式返回结果集确保所选选项与脚本提供结果集的方式一致,并将任务配置的其余部分配置为处理它。
参数设置不正确
执行SQL任务编辑器左侧的结果集标签是查询中的参数应映射到SSIS变量的位置。确保根据您在常规标签中选择的ResultSet
在此处映射您期望的映射变量。
使用我在“查询问题”下提供的代码,然后在执行SQL任务编辑器的常规标签中设置ResultSet
属性将成为Single row
。然后,在结果集选项卡中,您将从脚本(return_status
和mailitem_id
)返回的列值映射到SSIS变量(例如User::Status
和{ {1}}如屏幕截图所示。
答案 1 :(得分:0)
现在它可以正常使用以下查询并将mailitem_id作为输出。
exec sp_send_dbmail @profile_name=?,@recipients=?,@copy_recipients=?,@subject=?,@body=?,@importance=?,@body_format=?,@mailitem_id= ? OUTPUT