0
Declare @STAF_TO NVARCHAR(100)

SQL Server ストアド プロシージャの一部として次のクエリがあります。

SELECT @SF_TO = TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME
FROM tbl_Sf TS 
INNER JOIN tbl_Pl TP ON (TS.POPL_PK = TP.POPL_PK)
WHERE TS.SF_PK = @ID

この直前に挿入した print ステートメントに基づいて、それ@IDが 140 (Type ) に等しいことがわかっています。INTこのクエリを個別に実行しようとすると、正常に動作します。

ただし、ストアド プロシージャの一部として実行しようとすると、次のエラーが発生します。

メッセージ 8152、レベル 16、状態 13、プロシージャ Proc_Name、行 57
文字列またはバイナリ データが切り捨てられます。

57行SELECT目は、上記のクエリのステートメントがある場所です。なぜこれが起こっているのか、誰にも考えがありますか?

編集: に変更しようとしNVARCHAR(100)ましたNVARCHAR(200)NVARCHAR(MAX)、まだエラーが発生しました。また、個別に実行すると、クエリは正常に (100 文字で) 動作します。

4

3 に答える 3

7

列の定義が次のようになっていることはほぼ確実です。

FRST_NAME
MDLE_NAME
LAST_NAME

最大 98 文字 (スペースの場合は +2) まで追加できます。

@SF_TOよりも大きなものとして宣言することをお勧めしますNVARCHAR(100)(ただし、正確にはわかりません)。

確かに、エラー メッセージのトラブルシューティングは面倒です。出力にさらに詳細が含まれていれば、それは素晴らしいことです。この Connect アイテムに投票/コメントしてください

于 2013-03-27T17:48:03.337 に答える
2

連結ステートメントは、ほぼ確実に、@SF_TO の宣言された長さよりも長いレコードになります。@SF_To の長さを増やす必要があります。

于 2013-03-27T17:48:58.263 に答える
1

次の連結が原因で、このエラーが発生しています。

TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME

文字より大きいです100。これはすべての行に当てはまるわけではありませんが、選択している行には当てはまります。この select ステートメントを実行した場合:

SELECT TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME
FROM tbl_Sf TS 
INNER JOIN tbl_Pl TP ON (TS.POPL_PK = TP.POPL_PK)
WHERE LEN(TP.FRST_NAME + ' ' + TP.MDLE_NAME + ' ' + TP.LAST_NAME) > 100

問題のある行を見つけることができます。もう 1 つの方法は、単純に@STAF_TO変数を 3 つの列を合わせた長さ + 2 に等しくする50こと@STAF_TOです152

于 2013-03-27T17:48:39.803 に答える