Comment copier uniquement les colonnes modifiées de toutes les lignes du tableau 1 dans le tableau 2 du serveur SQL 2014

sqlbulkcopy sql-server sql-server-2012

Question

  1. J'ai 2 tables table1 et table2.
  2. Initialement, table1 contient des données et table2 est une table vide ayant la même structure de colonne (réplica).

  3. J'ai d'abord copié toutes les données de table1 à table2. maintenant, après quelques jours, certaines colonnes de quelques lignes sont modifiées dans table1 par une application externe.

  4. Maintenant, voici mon problème réel commence Comment mettre à jour uniquement les colonnes modifiées de table1 dans table2 dans le serveur SQL. Je suis ouvert pour la procédure stockée, le travail par lots, SSIS ou tout autre moyen dans le serveur SQL.

Réponse acceptée

Ill écrire cette une réponse afin que vous puissiez obtenir l'inspiration pour savoir comment cela se fait.

Le script va insérer de nouveaux enregistrements dans la table2. Lorsque des lignes correspondent sur votre clé métier, mais que d'autres attributs ont été modifiés, la ligne de la seconde table est mise à jour en fonction de votre clé commerciale.

MERGE dbo.Client_SCD1 AS DST
USING CarSales.dbo.Client AS SRC
ON (SRC.ID = DST.BusinessKey)
WHEN NOT MATCHED THEN
INSERT (BusinessKey, ClientName, Country, Town, County, Address1, Address2, ClientType, ClientSize)
VALUES (SRC.ID, SRC.ClientName, SRC.Country, SRC.Town, SRC.County, Address1, Address2, ClientType, ClientSize)
WHEN MATCHED 
AND (
 ISNULL(DST.ClientName,'') <> ISNULL(SRC.ClientName,'') 
 OR ISNULL(DST.Country,'') <> ISNULL(SRC.Country,'') 
 OR ISNULL(DST.Town,'') <> ISNULL(SRC.Town,'')
 OR ISNULL(DST.Address1,'') <> ISNULL(SRC.Address1,'')
 OR ISNULL(DST.Address2,'') <> ISNULL(SRC.Address2,'')
 OR ISNULL(DST.ClientType,'') <> ISNULL(SRC.ClientType,'')
 OR ISNULL(DST.ClientSize,'') <> ISNULL(SRC.ClientSize,'')
 )
THEN UPDATE 
SET 
 DST.ClientName = SRC.ClientName 
 ,DST.Country = SRC.Country 
 ,DST.Town = SRC.Town
 ,DST.Address1 = SRC.Address1
 ,DST.Address2 = SRC.Address2
 ,DST.ClientType = SRC.ClientType
 ,DST.ClientSize = SRC.ClientSize
;

Jetez un coup d’œil ici pour SCD type 1 - Je suppose que c’est ce que vous cherchez



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi