如何修复错误:多步OLE DB操作生成错误.检查每个OLE DB状态值



在执行sql任务时,我将变量值作为输入参数传递给脚本。它是包中的字符串变量,值为C:/Archive

在execute sql任务中的参数映射中,输入参数数据类型为varchar。

执行sql任务中的脚本是

Declare @body1 nvarchar(max), @b nvarchar(max)
set @body1 = 'The softdollar error files are located at '
set @b =  @body1 + ?
EXEC msdb.dbo.sp_send_dbmail 
@profile_name='PWO Notification',
@recipients='JoJo@foo.com',
@subject= 'Soft Dollar Package',
@body= @b

包抛出错误:

"多步OLE DB操作生成错误。请检查每个OLE DB状态值(如果可用)。没有完成任何工作。"。可能的失败原因:查询问题、"ResultSet"属性设置不正确、参数设置不正确或连接未正确建立。

如果将set @b = @body1 + ?更改为set @b = @body1 + N'?',是否有效?

我的假设是,该语句并不像人们所期望的那样串联。具体来说,如果你做了declare @c nvarchar(max); SET @c =?; SET @b = @body1 + @c;,我怀疑事情会以正确的、逃避的方式被逃避和替换。

如果没有,请返回报告,我将删除此答案。

我通过创建一个新变量并将脚本作为该变量中的表达式来修复它。在执行sql任务中调用了变量。将脚本中参数映射中的变量设置为@[user::variable],其中问号为。

最新更新