![](/img/trans.png)
[英]how can I create a trigger in SQL Server to update after insert in a table
[英]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.