1

このエラーを生成するストアド プロシージャを実行すると、エラーが 42 行目あたりにあると表示される場合があります。しかし、エラーは 42 行目ほどではありません。結合にある場合もあれば、関数にある場合もあり、サブクエリにある場合もありますが、42 行目です。エラーに近い、またはリモートでさえ関連することは決してありません。

私が通常しなければならないことは、すべてのストアド プロシージャ コードをコピーし、すべての入力を再作成して既定値を設定し、それを分解して 1 つずつ再実行し、切り捨てられたデータのビットを見つけることです。エラーが消えたら、削除した最後のコード バッチの何かが原因であることがわかったので、そのバッチの分解を開始します。それは苦痛であり、そのような単純な修正でこのような単純なエラーを解決するにはかなり長い時間がかかります.

私が見逃しているかもしれないこれをデバッグする簡単な方法はありますか?

4

1 に答える 1

1

ストアド プロシージャにコードを追加して、変数の値をテーブルに挿入する前に変数の長さを確認し、必要に応じてエラーを発生させる必要があります。- 以下の例を参照してください。

コードスニペット

--This batch will fail with the SQL Server error message

 DECLARE @MyTable TABLE (MyID INT IDENTITY(1, 1), MyValue VARCHAR(10))

 DECLARE @MyParameter VARCHAR(100)

--Create a string of 52 chars in length

SET @MyParameter = REPLICATE('Z', 52)

INSERT INTO @MyTable(MyValue)

VALUES (@MyParameter)

行く

--This batch will fail with a custom error message

DECLARE @MyTable TABLE (MyID INT IDENTITY(1, 1), MyValue VARCHAR(10))

DECLARE @MyParameter VARCHAR(100)

--Create a string of 52 chars in length

SET @MyParameter = REPLICATE('Z', 52)

IF LEN(@MyParameter) > 10

BEGIN

RAISERROR('You attempted to insert too many characters into MyTable.MyValue.', 16, 1)

RETURN

END

ELSE

BEGIN

 INSERT INTO @MyTable(MyValue)

 VALUES (@MyParameter)

END

GO
于 2013-06-20T18:01:59.830 に答える