Je travaille sur une procédure stockée censée insérer ou mettre à jour des lignes dans une table distante. J'ai essayé d'utiliser MERGE, mais il n'est pas possible d'utiliser MERGE lorsque la table cible est distante. Est-ce que quelqu'un peut me montrer comment puis-je faire la mise à jour dans le sproc? Dois-je d'abord lire les enregistrements dans une table temporaire, puis comparer les valeurs? La valeur de la colonne que je suis intéressé à mettre à jour est FlagValue.Procédure stockée sans paramètre pour mettre à jour l'insertion
MISE À JOUR
j'ai pu créer un serveur lié sur l'autre serveur et déplacé la cible et la source.
Je mets ensemble une procédure stockée qui utilise MERGE, je me demandais si quelqu'un pouvait me aider à examiner le code et laissez-moi savoir s'il semble ok. Le code doit fondamentalement mettre à jour la colonne FlagValue si le sku réside déjà dans la table cible mais la valeur FlagValue est différente, et il doit insérer des enregistrements qui sont également limités à SELECT dans USING() comme SOURCE, et pas tout insérer enregistrements du produit de table.
MISE À JOUR 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;
Merci pour vos recommandations.
Une solution consiste à créer la procédure stockée sur le serveur distant. Ensuite, vous pouvez utiliser 'MERGE'. – Eric
Quelle MISE À JOUR? Montrez-nous la mise à jour que vous voulez exécuter. – RBarryYoung
Je viens de l'ajouter. Ma faute. –