sql-server – 错误“执行sql任务中由于ssis中的编译错误导致无法分析批处理”,同时传递存储过程的输出参数

我使用sp_send_dbmail来获取mailitem_id作为输出.当我使用输出参数运行查询时

enter image description here

它投掷低于错误,没有输出它工作正常.

Error: Execute SQL Task] Error: Executing the query “exec ? = sp_send_dbmail @profile_name=?, @recipien…” failed with the following error:
The batch could not be analyzed because of compile errors.
Possible failure reasons: Problems with the query, “ResultSet” property not set correctly, parameters not set correctly, or connection not established correctly.

查询:

exec ? = sp_send_dbmail @profile_name = ?, @recipients = ?, 
                        @copy_recipients = ?, @subject = ?,
                        @body = ?, @importance = ?,
                        @body_format = ?@mailitem_id = ? OUT

@mailitem_id是存储过程中的OUTPUT参数,INT类型是..

我尝试了不同的方法来传递输出参数,但仍然得到相同的错误…是否失败与数据类型不匹配或语法错误与传递输出参数无法得到它..

请帮我解决这个问题.我在屏幕截图中添加了参数映射窗口.我在mailitem_id的参数映射中尝试使用Short,ULarge_integer和Large_integer类型而不是Long.

最佳答案
可能是错误消息中描述的几个内容之一,或者所有内容.我将按照显示的顺序处理错误消息.

解决错误消息

Problems with the query

>使用EXEC @return_status = …语法时,必须使用@符号定义T-SQL变量.变量也必须声明,所以EXEC?只有当参数0作为@return_value之类的值传入时才是合乎逻辑的.
>正如marc_s评论的那样,脚本缺少两个参数之间的逗号:@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” property not set correctly

在“执行SQL任务编辑器”的“常规”选项卡中,“结果集”组中的ResultSet值是多少?

选项是:

>无 – 查询不返回任何结果
>单行 – 查询只返回一行
>完整结果集 – 查询返回多行
> XML – 查询以XML格式返回结果集

确保所选选项与脚本提供结果集的方式一致,并将任务配置的其余部分配置为处理它.

parameters not set correctly

“执行SQL任务编辑器”左侧的“结果集”选项卡是查询中的参数应映射到SSIS变量的位置.确保根据您在“常规”选项卡中选择的ResultSet,在此处映射您期望的映射变量.

把它们放在一起

使用我在“查询问题”下提供的代码,然后将“执行SQL任务编辑器”的“常规”选项卡中的ResultSet属性设置为“单行”.然后,在“结果集”选项卡中,您将从脚本返回的列值(return_status和mailitem_id)映射到SSIS变量(例如,屏幕截图中显示的User :: Status和User :: mailitem_id).

转载注明原文:sql-server – 错误“执行sql任务中由于ssis中的编译错误导致无法分析批处理”,同时传递存储过程的输出参数 - 代码日志