2017-01-26 4 views
0

通常、このエラーはフィールドの1つがデータの長さを含むには小さすぎることを意味します。それが私が始めたところです。私は空白をチェックするために前後のXの値を埋め込みました。データの長さをチェックするためにLENを使用しましたが、間違ったものは見つかりませんでした。selectサブクエリで挿入時に文字列またはバイナリデータが切り捨てられる

CREATE TABLE TEMP1 (BUSINESS_UNIT VARCHAR(5) NOT NULL, 
NATIONAL_ID VARCHAR(20) NOT NULL, 
ACCOUNT_BALANCE DECIMAL(12, 2) NOT NULL, 
STRM VARCHAR(4) NOT NULL, 
FIRST_NAME_SRCH VARCHAR(30) NOT NULL, 
LAST_NAME_SRCH VARCHAR(30) NOT NULL, 
COMMON_ID VARCHAR(8) NOT NULL) 


INSERT INTO TEMP1 (BUSINESS_UNIT, NATIONAL_ID, ACCOUNT_BALANCE, STRM, 
FIRST_NAME_SRCH, LAST_NAME_SRCH, COMMON_ID) 
(SELECT ASF.BUSINESS_UNIT, NATL.NATIONAL_ID, ASF.ACCOUNT_BALANCE, '1162' 
,NM.FIRST_NAME_SRCH,NM.LAST_NAME_SRCH,ASF.EMPLID 
FROM PS_ACCOUNT_SF ASF (NOLOCK) 
, PS_NAMES NM (NOLOCK) 
, PS_PERS_NID NATL (NOLOCK) 
WHERE ASF.BUSINESS_UNIT = 'ABCDEFG' 
AND ASF.ACCOUNT_TERM = '1162' 
AND ASF.ACCOUNT_BALANCE > 0 
.......... more code, etc. 

選択が15行戻されました。 サンプル行:今すぐ

ABCD1 123456789 46.30 1162 JOHN SMITH 12345678 

、私は私が選択し、ハードコードでASF.EMPLIDフィールドをコメントアウトするとき「12345678」のようなものは、それが成功したので、それはEMPLID分野だということを理解することができました。しかし、返された値の長さを調べたところ、すべて8でした。

選択したフィールドASF.EMPLIDはVARCHAR(11)で、宛先フィールドはVARCHAR(8)であることに注意してください。 私の解決策はCOMMON_ID VARCHAR(8)をVARCHAR(11)に変更するだけでした。うまくいきました。 しかし、私の質問はまだ残っています...値の長さが8なら問題ありませんか?それとも何か他に起こっていることはありますか?

のMicrosoft SQL Server 2014(SP1-GDR)

+0

"問題"が見つかりました。ソースは11文字、宛先は8文字です。この警告は、あなたが3文字を失う可能性があることを知らせるだけです。 – Hogan

+0

エラーを投げて処理を停止しました。 'SQLExecute error ...ステートメントが終了しました' しかし、あなたが言っていることは、値の長さがわかっていてもソースと宛先フィールドの長さが一致しないことです。 – user3760332

+0

はいあなたがそれを修正しなければ動作しない警告です。だからキャストをして、それがあなたが欲しいものか、あなたの目的地をより大きくするなら、それを明示してください。 – Hogan

答えて

0

はsubstingまたは8例えば にlenを左 最大設定を使用してみてくださいこの作品なら、あなたは切り捨ての問題を知っているテーブル から(8、フィールド)左セレクト。つまり、いくつかのフィールドが> 8

関連する問題