0

由于我们用于在 SQL Server 中设置链接服务器的 ODBC 驱动程序的编程限制,我必须使用游标来处理对链接服务器的插入,因为 ODBC 驱动程序在尝试基于集合的插入时失败。

我使用的代码与以下代码非常相似:

SET NOCOUNT ON

DECLARE curOutput CURSOR FOR    SELECT  QTY, QB_ITEM_ID, QB_ID, QB_Flag
            FROM        dbo.QB_INVOICELINES
            WHERE       QB_ID IS NOT NULL
            ORDER BY    QB_ID, QB_FLAG DESC, Transaction_Type ASC;

DECLARE @Quantity DECIMAL(18,2), @ItemID VARCHAR(100), @CustomerID VARCHAR(100), @QBFlag INT;

OPEN    curOutput

FETCH   NEXT
FROM    curOutput
INTO    @Quantity, @ItemID, @CustomerID, @QBFlag;
--Subroutine for QB insert
WHILE @@FETCH_STATUS = 0
    BEGIN
    INSERT INTO REMOTE...INVOICE_TEST (QB_ID,QB_ITEM_ID,Qty,QB_Flag)
        VALUES(@CustomerID,@ItemID,@Quantity,@QBFlag)
    PRINT   'Transaction quantity of ' + CAST(@Quantity AS VARCHAR(12)) +  '     for item ID ' + @ItemID + ' for customer ID ' + @CustomerID + ' is now posted.'

    FETCH   NEXT
    FROM    curOutput
    INTO    @Quantity,
        @ItemID,
        @CustomerID,
        @QBFlag;
END
--End subroutine for QB insert
CLOSE       curOutput
DEALLOCATE  curOutput

在处理记录时,@QBFlag 设置为 1 或 0,其中 1 实质上指示 ODBC 驱动程序将事务保存在缓存中,直到处理 0,此时事务被发布到链接的服务器表。

使用上述方法时,驱动程序会很好地运行数百行(通常有 7500 - 9000 行要处理),但最终会失败,因为我相信即使游标一次处理一条记录也是如此仍然尝试以比链接表处理事务的速度更快的速度写入表。

我应该简单地使用 DELAY 功能还是有更好的解决方案?

干杯! 麦克风

4

1 回答 1

0

你不需要光标。您可以使用简单的插入查询:

insert into REMOTE...INVOICE_TEST 
(QB_ID,QB_ITEM_ID,Qty,QB_Flag)
SELECT  QTY, QB_ITEM_ID, QB_ID, QB_Flag
FROM dbo.QB_INVOICELINES
WHERE QB_ID IS NOT NULL
于 2013-09-04T18:12:09.530 回答