Ich arbeite an einer gespeicherten Prozedur, die Zeilen in einer Remote-Tabelle einfügen oder aktualisieren soll. Ich habe versucht, MERGE zu verwenden, aber es ist nicht möglich, MERGE zu verwenden, wenn die Zieltabelle eine Fernbedienung ist.Parameterlose gespeicherte Prozedur zum Aktualisieren einfügen
Kann mir jemand zeigen, wie kann ich auch das Update innerhalb der Sproc tun? Muss ich zuerst die Datensätze in eine temporäre Tabelle einlesen und dann die Werte vergleichen? Der Spaltenwert, den ich aktualisieren möchte, ist FlagValue.
UPDATE
konnte ich einen Verbindungsserver auf dem anderen Server erstellen und das Ziel und Quelle gekippt.
Ich stelle eine gespeicherte Prozedur zusammen, die MERGE verwendet, ich frage mich, ob jemand mir helfen könnte, den Code zu überprüfen und mich wissen zu lassen, ob es in Ordnung ist. Der Code muss im Grunde die FlagValue-Spalte aktualisieren, wenn der SKU bereits in der Zieltabelle enthalten ist, der FlagValue-Wert jedoch anders ist und Datensätze einfügen, die ebenfalls auf SELECT innerhalb von USING() als SOURCE beschränkt sind Datensätze aus dem Tabellenprodukt.
AKTUALISIERT T-SQL:
ALTER PROCEDURE [dbo].[mn_RecordInfo_Upsert]
AS
BEGIN
--Synchronize the target table with refreshed data from source table
MERGE [dbo].[RecordInfo] AS [t]
USING
(SELECT TOP 100 PERCENT
[p].[ProductID]
, [p].[Flag]
FROM
[server].[db].[dbo].[Product] [p] -- Remote linked server table
WHERE
(
[Category] = 2
OR [Description] = 'This type of product')
AND LEN([ProductID]) = 10
AND [ProductID] LIKE 'P0%'
ORDER BY
[Date] DESC
) AS [s]
ON ([t].[PID] = [s].[ProductID])
--When records are matched, update the records if there is any change
WHEN MATCHED AND [t].[Flag] <> [s].[Flag]
AND [t].[PID] = [s].[ProductID] THEN
UPDATE SET
[t].[Flag] = [s].[Flag]
--When no records are matched, insert the incoming records from source table to target table
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
[PID]
, [Flag])
VALUES (
[s].[ProductID]
, [s].[Flag])
--SELECT @@ROWCOUNT;
OUTPUT
$action AS [DMLAction]
, [inserted].*
, [deleted].*;
END;
Vielen Dank für Ihre Empfehlungen.
Eine Lösung besteht darin, die gespeicherte Prozedur auf dem Remote-Server zu erstellen. Dann können Sie 'MERGE' verwenden. – Eric
Was UPDATE? Zeigen Sie uns das Update, das Sie ausführen möchten. – RBarryYoung
Ich habe es gerade hinzugefügt. Mein Fehler. –