2016-08-15 91 views
0

您好I'have以下结果为光标多次查询插入使用光标

PONumber Code QuantityReceived 
0200073 200757 4 
0200073 201052 2 
0200073 201435 2 
0200073 200757 10 
0200073 201056 1 
0200073 202200 2 

我使用的程序是

BEGIN 
DECLARE @PN nvarchar(30); 
DECLARE @TCODE nvarchar(50); 
DECLARE @REQNTY INT; 
DECLARE @LOTID nvarchar(50); 
DECLARE @QUANTITY nvarchar(50); 

DECLARE CUR CURSOR FOR 
SELECT PONumber,Code,QuantityReceived 
FROM Temp_stock2 
--GROUP BY PONumber,Code,QuantityReceived 

OPEN CUR 

FETCH NEXT FROM CUR INTO @PN,@TCODE,@REQNTY 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    BEGIN 
     WHILE(@REQNTY>0) 
     BEGIN 
      SELECT TOP(1)@LOTID=RR1038_LotEntry.ID,@QUANTITY=RR1038_LotEntry.Quantity 
      FROM [dbo].RR1038_LotEntry 
      INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
      WHERE RR1038_LotEntry.Quantity>0 AND [email protected] 
      ORDER BY RR1038_LotEntry.Quantity DESC; 

      IF (@QUANTITY >= @REQNTY) 
       BEGIN 
        -- UPDATING LOT ENTRY TABLE 
        UPDATE [dbo].RR1038_LotEntry 
        SET RR1038_LotEntry.Quantity = [email protected],LastUpdated=GETDATE() 
        FROM [dbo].RR1038_LotEntry 
        INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
        WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 

        -- INSERTING THE SAME DATA TO LOT HISTORY TABLE 
        INSERT INTO [dbo].RR1038_LotHistory 
        (StoreID,LotEntryId,Quantity,ReferenceNumber,ReferenceType,LastUpdated) 
        SELECT 
        0 as StoreID ,Temp_stock2.LotID, 
        @REQNTY, 
        Temp_stock2.PurchaseOrderid as ReferenceNumber, 
        3 as ReferenceType,GETDATE() as LastUpdated 
        FROM [dbo].RR1038_LotEntry 
        INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
        WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 

        SET @REQNTY=0; 

       END 
      ELSE 
       BEGIN 
        -- INSERTING THE SAME DATA TO LOT HISTORY TABLE 
        INSERT INTO [dbo].RR1038_LotHistory 
        (StoreID,LotEntryId,Quantity,ReferenceNumber,ReferenceType,LastUpdated) 
        SELECT 
        0 as StoreID ,Temp_stock2.LotID, 
        @REQNTY, 
        Temp_stock2.PurchaseOrderid as ReferenceNumber, 
        3 as ReferenceType,GETDATE() as LastUpdated 
        FROM [dbo].RR1038_LotEntry 
        INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
        WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 

        SET @[email protected]@QUANTITY; 

        -- UPDATING LOT ENTRY TABLE 
        UPDATE [dbo].RR1038_LotEntry 
        SET RR1038_LotEntry.Quantity = 0,LastUpdated=GETDATE() 
        FROM [dbo].RR1038_LotEntry 
        INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
        WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 
       END 
     END 
    END 

    FETCH NEXT FROM CUR INTO @PN,@TCODE,@REQNTY 
END 
    CLOSE CUR 
    DEALLOCATE CUR 
END 

虽然我执行我得到的程序针对CODE的特定行的重复插入存在两次。

Output 我该如何避免结果集中的重复条目?

+3

当值不同(日​​期和中间的数值) – artm

+0

你找到程序的任何问题,他们不重复? –

+0

是的,你是对的,我一直在拍卖表中盲目搜索,没有提供任何具体的输入,改变了它。谢谢 –

回答

0

再一看查询的一些修改如下,现在做工精细,

DECLARE CUR CURSOR FOR 
SELECT PONumber,Code,QuantityReceived ,LotID 
FROM Temp_stock2 


OPEN CUR 

FETCH NEXT FROM CUR INTO @PN,@TCODE,@REQNTY,@LOTID 
WHILE @@FETCH_STATUS = 0 
BEGIN 
BEGIN 

    -- UPDATING LOT ENTRY TABLE 
    UPDATE [dbo].RR1038_LotEntry 
    SET RR1038_LotEntry.Quantity = [email protected],LastUpdated=GETDATE() 
    FROM [dbo].RR1038_LotEntry 
    INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
    WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 

    -- INSERTING THE SAME DATA TO LOT HISTORY TABLE 
    INSERT INTO [dbo].RR1038_LotHistory 
    (StoreID,LotEntryId,Quantity,ReferenceNumber,ReferenceType,LastUpdated) 
    SELECT 
    0 as StoreID ,Temp_stock2.LotID, 
    @REQNTY, 
    Temp_stock2.PurchaseOrderid as ReferenceNumber, 
    3 as ReferenceType,GETDATE() as LastUpdated 
    FROM [dbo].RR1038_LotEntry 
    INNER JOIN Temp_stock2 on Temp_stock2.LotID=RR1038_LotEntry.ID 
    WHERE RR1038_LotEntry.ID [email protected] AND [email protected]; 
END 

FETCH NEXT FROM CUR INTO @PN,@TCODE,@REQNTY,@LOTID 
END 
CLOSE CUR 
DEALLOCATE CUR