1

我将变量值作为输入参数传递给执行 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”属性设置不正确,参数设置不正确,或连接未正确建立。

4

2 回答 2

1

如果换成set @b = @body1 + ?set @b = @body1 + N'?'不行?

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

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

于 2013-06-26T17:22:57.420 回答
0

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

于 2013-06-26T17:58:04.620 回答