更新并插入远程服务器(链接服务器)

时间:2016-01-06 21:32:11

标签: sql sql-server azure-sql-database

我试图运行更新,如果远程服务器上不存在该记录,请插入它。我尝试了两种不同的方法(从更新中获取输出并将其存储在临时表和MERGE中)。以下是我在这两种方法中使用的代码。

这是我尝试的OUTPUT方式:

DECLARE @updated_ids TABLE(id nvarchar(255))
UPDATE DBSERVER.ft_test2.dbo.TestOrders SET OrderNumber=o.OrderNumber, FormulaCode=o.FormulaCode, FormulaName=o.FormulaName, BeginDate=o.BeginDeliveryDate
OUTPUT inserted.OrderNumber INTO @updated_ids
FROM DBSERVER.ft_test2.dbo.TestOrders ta, LTB.dbo.Orders o
WHERE ta.OrderNumber=o.OrderNumber AND o.BeginDeliveryDate >= '12/24/15'
INSERT INTO DBSERVER.ft_test2.dbo.TestOrders
SELECT o.OrderNumber, o.FormulaCode, o.FormulaName, o.BeginDeliveryDate
FROM LTB.dbo.Orders o
WHERE OrderNumber NOT IN (SELECT id FROM @updated_ids) AND o.BeginDeliveryDate >= '12/24/15'
GO

我得到的错误是:

Msg 405, Level 16, State 1, Line 2
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.

我尝试的MERGE是:

MERGE
INTO DBSERVER.ft_test2.dbo.TestOrders ta
USING LTB.dbo.Orders o
ON ta.OrderNumber = o.OrderNumber
WHEN MATCHED AND o.BeginDeliveryDate >= '12/24/15' AND (o.OrderNumber <> ta.OrderNumber OR o.FormulaCode <> ta.FormulaCode OR o.FormulaName <> ta.FormulaName OR o.BeginDeliveryDate <> ta.BeginDate) THEN
UPDATE
SET ta.FormulaCode=o.FormulaCode, ta.FormulaName=o.FormulaName
WHEN NOT MATCHED AND o.BeginDeliveryDate >= '12/24/15' THEN
INSERT (OrderNumber, FormulaCode, FormulaName, BeginDate) VALUES (o.OrderNumber, o.FormulaCode, o.FormulaName, o.BeginDeliveryDate);

我得到的错误是:

Msg 5315, Level 16, State 1, Line 1
The target of a MERGE statement cannot be a remote table, a remote view, or a view over remote tables.

我知道你可以通过在遥控器上运行它来使用合并&#34; pull&#34;数据,但这不是一个选项,因为远程服务器是一个Azure数据库,并没有该功能,因为我需要最终需要在我完成时将其作为一个工作运行。

任何人都有任何想法或我可以尝试的其他选择吗?

0 个答案:

没有答案