通常、このエラーはフィールドの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)
"問題"が見つかりました。ソースは11文字、宛先は8文字です。この警告は、あなたが3文字を失う可能性があることを知らせるだけです。 – Hogan
エラーを投げて処理を停止しました。 'SQLExecute error ...ステートメントが終了しました' しかし、あなたが言っていることは、値の長さがわかっていてもソースと宛先フィールドの長さが一致しないことです。 – user3760332
はいあなたがそれを修正しなければ動作しない警告です。だからキャストをして、それがあなたが欲しいものか、あなたの目的地をより大きくするなら、それを明示してください。 – Hogan