我将变量值作为输入参数传递给execute sql task中的脚本。它是包含值C:/ Archive
的字符串变量输入参数数据类型是执行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”属性设置不正确,参数设置不正确或连接未正确建立。
答案 0 :(得分:1)
如果您将set @b = @body1 + ?
更改为set @b = @body1 + N'?'
它是否有效?
我的假设是声明并没有像人们预期的那样连接。具体来说,如果你做了declare @c nvarchar(max); SET @c =?; SET @b = @body1 + @c;
我怀疑事情将被转义并以正确的,逃脱的方式取代。
如果没有,请报告,我将删除此答案。
答案 1 :(得分:0)
我通过创建一个新变量并将脚本作为该变量中的表达式来修复它。在Execute sql task中调用变量。将脚本中参数映射的变量设置为@ [user :: variable],其中问号为。