问题,我怎样才能使插入只执行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'
答案 0 :(得分:4)
您发布的代码只会执行9次。 如果您获得的插入次数超出了您的预期,那是因为select语句返回的行数超过了一行。
在第一个循环之后,您将复制该行。因此,循环的每次连续迭代将返回n + n行,其中n是前一次迭代返回的行数。
你到底想要做什么?