我正在使用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中手动运行类似的命令可以正常运行。
任何人都知道为什么?
答案 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
失败,因为它无法将字符串插入整数字段。