繁体   English   中英

如何使用触发器将链接服务器查询中的数据更新/插入到SQL Server表中?

[英]How can I update / insert data from a linked server query to SQL Server table using a trigger?

每当尝试找到符合条件的新记录时,我都试图从链接服务器查询中自动更新SQL Server表。 因此,我按以下方式使用了触发器,但它不是在指定的表中插入/更新记录。 我在这里想念什么?

ALTER TRIGGER [dbo].[WORKORDERSCURDATE] 
ON [dbo].[WORKORDERS]
AFTER INSERT, UPDATE, DELETE
AS 
    IF TRIGGER_NESTLEVEL() > 1
        RETURN

    BEGIN
        INSERT INTO WORKORDERS    
            SELECT * 
            FROM OPENQUERY([DB29], 'SELECT DISTINCT Customers.CustomerID, Customers.Customer_Bill_Name, Customers.WhichShipVia, 
 LineItem.ItemID, JrnlHdr.INV_POSOOrderNumber, JrnlHdr.CustomerInvoiceNo, 
JrnlHdr.Comment2, JrnlHdr.ShipByDate, JrnlHdr.GoodThruDate, JrnlHdr.CustomerSONo, JrnlHdr.Reference, JrnlHdr.TransactionDate,
JrnlRow.DistNumber,  LineItem.SalesDescription, LineItem.PartNumber, LineItem.Category, LineItem.ItemClass, LineItem.ItemDescription 
                         FROM Customers
                         INNER JOIN JrnlHdr ON Customers.CustomerRecordNumber = JrnlHdr.CustVendId
                         LEFT OUTER JOIN Address ON Customers.CustomerRecordNumber = Address.CustomerRecordNumber
                         INNER JOIN JrnlRow ON JrnlHdr.PostOrder = JrnlRow.PostOrder
                         INNER JOIN LineItem ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
                         WHERE JrnlHdr.JrnlKey_Journal = 11 
                           AND JrnlHdr.TransactionDate = CURDATE() 
                           AND JrnlHdr.PostOrder = JrnlRow.PostOrder  
                           AND JrnlHdr.CustVendId = Customers.CustomerRecordNumber 
                           AND JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber 
                           AND JrnlHdr.POSOisClosed = 0')
end

您在上面的注释中描述的与您所做的相反。 您的触发器需要在远程服务器上构建。 触发器必须建立在单个对象上。 我假设客户表是触发触发器的表。 触发器将在本地服务器上执行插入操作。

一些建议,触发器可能不是执行此操作的最佳方法。 您要做的实际上是ETL(提取转换负载)。 即使需要分批小批量地进行,这种事情通常也更有效地进行批处理。

本地服务器上的存储过程会定期检查远程服务器上的新记录,然后将它们移过来,这是执行此操作的标准方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM