为什么使用两个参数时执行SQL任务失败?

时间:2013-02-18 18:04:45

标签: ssis

我正在使用SQL服务器数据工具(SSDT)2010。我在执行SQL任务中收到以下错误:

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, 
if available. No work was done

SQL语句设置为:

INSERT INTO DerivedSoftware
           (Name, VendorID, RuleID, GroupID, SourceEnumID, DeviceID)
    VALUES ('?', '1', '1', '1', '1', ?)

使用的参数是数据类型 String Int32

如果我编辑执行SQL任务以便它只使用其中一个参数,它可以正常工作。任何一个都可以。但是尝试使用两者都失败了以上错误。

在SQL Server Management Studio中手动运行类似的命令可以正常运行。

任何人都知道为什么?

1 个答案:

答案 0 :(得分:3)

更改您的查询语句,以删除第一个参数占位符周围的单引号( ' )。将其从 '?' 更改为 ?

自:

INSERT INTO DerivedSoftware
(Name, VendorID, RuleID, GroupID, SourceEnumID, DeviceID)
VALUES ('?', '1', '1', '1', '1', ?);

要:

INSERT INTO DerivedSoftware
(Name, VendorID, RuleID, GroupID, SourceEnumID, DeviceID)
VALUES (?, '1', '1', '1', '1', ?);

问题原因:

当您将第一个参数占位符括在单引号内时,它实际上被视为字符串值。我假设您已在 Parameter Mapping 标签上按照下面提到的顺序定义了参数:

  • String 数据类型,换句话说 VARCHAR
  • Long 数据类型参数

现在,第一个问号被视为文字字符串值。 执行SQL任务正在尝试将字符串值传递给第二个问号,这实际上是一个整数字段。这导致Execute SQL Task失败,因为它无法将字符串插入整数字段。