0

質問、挿入を 9 回だけ実行するにはどうすればよいですか? @CN_COUNT の値なので、9 と言います。代わりに、これは 9*9 を実行しています。どんな助けでも本当に感謝します。

DECLARE @CN_COUNT INT
, @DATE VARCHAR(10) = CONVERT(VARCHAR(10), GETDATE(),101)
, @TIME VARCHAR(10) = CONVERT(VARCHAR(8), GETDATE(),114)


SELECT @CN_COUNT = COUNT(*) FROM CARTON_HEADER

DECLARE @CN INT
SET @CN = 1
WHILE (@CN  <= @CN_COUNT)
BEGIN
SET @CN = @CN + 1

INSERT INTO TM_CARTON(
    CN_NUMBER, CN_PICKTICKET, CN_LOAD_NUMBER, CN_SHIPMENT_NUMBER,         CN_PACKED_QTY, CN_TRACKING_NUMBER, 
    CN_ROUTE, CN_BOL, CN_MBOL, CN_PARCEL_NUMBER, CN_TRAILER_NUMBER, CN_CREATED_DATE, CN_CREATED_TIME)
SELECT 
    CN_NUMBER, CN_PICKTICKET, CN_LOAD_NUMBER, CN_SHIPMENT_NUMBER, CN_PACKED_QTY, CN_TRACKING_NUMBER, 
    CN_ROUTE, CN_BOL, CN_MBOL, CN_PARCEL_NUMBER, CN_TRAILER_NUMBER, @DATE, @TIME 
    FROM CARTON_HEADER WHERE CN_LOAD_NUMBER = '1000000002'

END
GO

サンプルデータは次のとおりです。

  CN_NUMBER      CN_STATUS  CN_LOAD_NUMBER
  1001333311111 85  1000000002
  1001333311112 85  1000000002
  1001333311114 85  1000000002
  1001333311113 85  1000000002
  1001333311115 85  1000000002
  1001333311116 85  1000000002
  1001333311117 85  1000000002
  1001333311118 85  1000000002
  1001333311119 85  1000000002

上記のデータはテーブル A にあります。これをテーブル B にコピーしたいと思います。ここで、CN_LOAD_NUMBER はステートメントで宣言するものです

申し訳ありませんが、解決策はループなしの単純な INSERT ステートメントよりも複雑になりました。

INSERT INTO TM_CARTON(
CN_NUMBER, CN_PICKTICKET, CN_LOAD_NUMBER, CN_SHIPMENT_NUMBER,         CN_PACKED_QTY, CN_TRACKING_NUMBER, 
CN_ROUTE, CN_BOL, CN_MBOL, CN_PARCEL_NUMBER, CN_TRAILER_NUMBER, CN_CREATED_DATE, CN_CREATED_TIME)
SELECT 
CN_NUMBER, CN_PICKTICKET, CN_LOAD_NUMBER, CN_SHIPMENT_NUMBER, CN_PACKED_QTY, CN_TRACKING_NUMBER, 
CN_ROUTE, CN_BOL, CN_MBOL, CN_PARCEL_NUMBER, CN_TRAILER_NUMBER, @DATE, @TIME 
FROM CARTON_HEADER WHERE CN_LOAD_NUMBER = '1000000002'
4

1 に答える 1

4

投稿したコードは 9 回しか実行されません。必要以上に多くの挿入が行われている場合は、select ステートメントが複数の行を返していることが原因です。

最初のループの後、行が複製されます。したがって、ループの連続する反復ごとに n+n 行が返されます。ここで、n は前の反復で返された行の数です。

正確には、何をしようとしているのですか?

于 2012-08-31T05:29:21.283 に答える