3

我正在使用 SQL Server Data Tools (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', ?)

使用的参数是数据类型StringInt32

如果我编辑 Execute SQL Task 以便它只使用这些参数之一,它工作正常。任何一个都可以正常工作。但是尝试使用两者都失败并出现上述错误。

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

有谁知道为什么?

4

1 回答 1

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数据类型参数

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

于 2013-02-18T18:19:23.067 回答