0

问题,我怎样才能使插入只执行 9 次?我说 9 是因为这是 @CN_COUNT 的值。相反,这是执行 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 回答