0

私はSQLServer2008r2開発者と協力しています。.NET / C#コードから呼び出すdbテーブルに行を追加するストアドプロシージャがあります。約70個のパラメーター(すべてのフィールド値)が渡されます。これは、最近まで問題なく、数か月間、毎日約5,000回実行されます。この表は基本的な株式市場データであり、各シンボルは毎日独自の行を取得しています。ある特定の銘柄記号について、SQLエラーが発生します。

Error converting data type numeric to decimal

テーブルに手動で行を追加し、ストアドプロシージャを介して渡される各パラメータ値を列ごとに入力しましたが、エラーは発生しませんでした。ストアドプロシージャをチェックして、挿入ステートメントのパラメータ/列が正しくペアになっていることを再確認しました。これも問題ありません。

だから私の質問...プロファイラーを使用して特定の誤ったパラメーター(または間違ったツリーを吠えている場合は他のエラーソース)を見つける方法はありますか?現時点では、spを実行する前にすべてのパラメーター値を表示する方法しか知りません...しかし、これは.NET側ですでに実行できます。

4

1 に答える 1

0

エラーから、データ型の問題であることがわかります。フィールドが多いため、誤ったパラメータを見つけるのは困難です。同様の問題に直面したら、私のアプローチについて説明します。これはあなたを助けるかもしれません。

パラメータ配列で試すことができます。個別のパラメータを渡す代わりに、すべてのフィールド名と値をコマで連結できます。たとえば、'field1name:field1value、field2ame:field2value、....'であり、プロシージャでは最初にテキストを'、'で分割します。再び値を「:」で分割します。したがって、フィールド名と値を取得します。これで、ループ内で各フィールドを1つずつ更新できます。エラーが発生した場所を確認します。

このfnSplit関数を確認し、Fieldとその値の両方を格納するように変更できます。次に、関数はすべてのフィールドと値を含むテーブルを返すので、このテーブルでループして、更新を1つずつ試すことができます。

于 2012-08-11T21:22:54.123 に答える