-2

選択リストから合計 22025 レコードを挿入します。以下のスクリプトを実行すると、「文字列またはバイナリ データが切り捨てられます」というエラー メッセージが表示されます。選択リストにwhere句を追加して、一度に挿入するレコードの数を減らすと、たとえば、最初の挿入で10000レコード、2番目の挿入で12025レコードになり、エラープロンプトは表示されません。各フィールドの長さを確認しましたが、宛先列の長さを超えていません。お知らせ下さい。ありがとう!

INSERT INTO [BWX] 
SELECT PK1.STRING_VALUE,PK2.STRING_VALUE,PK3.STRING_VALUE,PK4.STRING_VALUE,
       2000010, BW_ROW.ID AS BW_ROW_ID, BW_ROW.SEQUENCE_NUMBER, 
       0 AS UPDATE_FLAG, 0 AS DELETE_FLAG, BW_ROW.IS_ACTIVE 
FROM BW_CELL AS PK1, BW_COLUMN AS PK1COL, BW_CELL AS PK2, BW_COLUMN AS PK2COL, 
     BW_CELL AS PK3, BW_COLUMN AS PK3COL, BW_CELL AS PK4, BW_COLUMN AS PK4COL, 
     BW_COLUMN AS PK9COL, BW_ROW 
WHERE PK1.BW_ROW_ID = BW_ROW.ID AND PK1.PTN_KEY = 100 
      AND PK1.BW_COLUMN_ID = PK1COL.ID AND PK1COL.NAME = 'key_1' 
      AND PK2.BW_ROW_ID = BW_ROW.ID AND PK2.PTN_KEY = 100 
      AND PK2.BW_COLUMN_ID = PK2COL.ID AND PK2COL.NAME = 'key_2' 
      AND PK3.BW_ROW_ID = BW_ROW.ID AND PK3.PTN_KEY = 100 
      AND PK3.BW_COLUMN_ID = PK3COL.ID AND PK3COL.NAME = 'key_3' 
      AND PK4.BW_ROW_ID = BW_ROW.ID AND PK4.PTN_KEY = 100 
      AND PK4.BW_COLUMN_ID = PK4COL.ID AND PK4COL.NAME = 'key_4' 
      AND BW_ROW.BW_TBL_ID = 2000010 AND BW_ROW.IS_ACTIVE = 1 AND BW_ROW.TX_ID > -1 
      AND NOT EXISTS ( SELECT [BWX_ROW@DEVICE_FORECAST].BW_ROW_ID 
                       FROM [BWX_ROW@DEVICE_FORECAST] 
                       WHERE BW_ROW.ID = [BWX_ROW@DEVICE_FORECAST].BW_ROW_ID ) 
4

2 に答える 2

1

列に LEN を使用するだけでなく、DATALENGTH も使用する必要があります。LEN は列にトリムを追加しますが、DATALENGTHは追加しません...

無効な行を分離する限り、スキーマ内で作業する別のテーブルを作成できる場合は、いつでもINSERT TOP 100000 ....新しいテーブルを試して、どこが壊れているかを確認できます。行番号がわかれば、探し始めるのに適した場所になります。

于 2013-08-14T03:33:36.247 に答える