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', ?)

使用されているパラメーターは、データ型StringおよびInt32です。

これらのパラメーターの1つのみを使用するようにSQL実行タスクを編集すると、正常に機能します。どちらも問題なく動作します。しかし、両方を使用しようとすると、上記のエラーで失敗します。

SQL ServerManagementStudioで同様のコマンドを手動で実行すると正常に機能します。

誰もが理由を知っていますか?

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データ型パラメータ

これで、最初の疑問符がリテラル文字列値として扱われるようになりました。SQL実行タスクは、文字列値を2番目の疑問符(実際には整数フィールド)に渡そうとしています。これにより、Execute SQL Task整数フィールドに文字列を挿入できないため、が失敗します。

于 2013-02-18T18:19:23.067 に答える