La base de Langage de Manipulation de Données (DML) des commandes qui ont été utilisés au fil des ans sont Update, Insert et Delete. Ils font exactement ce que vous attendez: Insérer ajoute de nouveaux enregistrements, mise à Jour modifie les enregistrements existants et Supprimer supprime des enregistrements.
UPSERT instruction modifie les enregistrements existants, si l'un des dossiers n'est pas présent, il permet d'insérer de nouveaux enregistrements.
La fonctionnalité de UPSERT de tresorerie peut être obtenue par deux nouveaux TSQL opérateurs. Ce sont les deux nouveaux
EXCEPTINTERSECT
À l'exception de:-
Retourne toutes les valeurs distinctes de la requête à la gauche de l'opérande mais qui ne sont pas retournés par la requête à droite
Se croisent:-
Retourne toutes les valeurs distinctes qui sont renvoyées par les requêtes sur les côtés gauche et droit de l'INTERSECTION opérande.
Exemple:- disons que nous avons deux tableaux Tableau 1 et le Tableau 2
Une autre façon de créer un upsert en sql (si vous avez pré-phase ou phase de tables):
--Insert PortionINSERTINTO FinalTable
( Colums )SELECT T.TempColumns
FROM TempTable T
WHERE(SELECT'Bam'FROM FinalTable F
WHERE F.Key(s)= T.Key(s))ISNULL--Update PortionUPDATE FinalTable
SET NonKeyColumn(s)= T.TempNonKeyColumn(s)FROM TempTable T
WHERE FinalTable.Key(s)= T.Key(s)AND CHECKSUM(FinalTable.NonKeyColumn(s))<> CHECKSUM(T.NonKeyColumn(s))
C'est une bonne manière de le faire en SQL 2005, mais n'oubliez pas l'option la 3e section de la suppression de données. Toutefois, SQL Server 2008 a l'instruction MERGE avec des fonctionnalités similaires et est probablement plus rapide.
En dehors de T-SQL base de solutions (et ce n'est même pas marqué comme sql/tsql), vous pouvez utiliser un Flux de Données SSIS Tâche avec une Jointure de Fusion tel que décrit ici (et d'ailleurs).
La partie cruciale est la Jointure Externe Complète dans la Fusion Rejoindre (si vous ne voulez insérer/mettre à jour et de ne pas supprimer une Jointure Externe Gauche fonctionne aussi bien) de votre triés sources.
suivie par un Conditionnel Split pour savoir quoi faire ensuite: Insérer dans l'emplacement de destination (qui est aussi ma source ici), le mettre à jour (via la Commande SQL), ou en supprimer (via la Commande SQL).
INSÉRER: Si le gid est disponible uniquement sur la source (à gauche)
Mise à JOUR Si le gid existe à la fois la source et la destination
SUPPRIMER: Si le gid est pas trouvé dans la source, mais il existe dans la destination (à droite)
D'habitude, je préfère laisser SSIS, du moteur pour gérer la fusion delta. Que les nouveaux articles sont insérés et modifiées sont mises à jour.
Si votre Serveur de destination ne dispose pas de suffisamment de ressources pour gérer la lourde requête, cette méthode permet d'utiliser les ressources de votre serveur SSIS.
Voir SQL Server 2008 à l'Aide de Fusion à Partir de SSIS. J'ai mis en place quelque chose comme ça, et c'était très facile. Juste en utilisant le BOL page L'insertion, la mise à Jour et Suppression de Données à l'aide de FUSION était assez pour me faire aller.
Le kimballgroup lien est mort.
OriginalL'auteur John Saunders
Je vous suggère de jeter un oeil au Tapis de Stephen weblog sur SQL Server upsert.
SQL 2005 - UPSERT: Dans la nature, mais pas par son nom; mais, à la dernière!
Le lien semble mort. Essayez de blogs.technet.com/mat_stephen/archive/2005/08/31/410022.aspx
OriginalL'auteur Arnkrishn
La base de Langage de Manipulation de Données (DML) des commandes qui ont été utilisés au fil des ans sont Update, Insert et Delete. Ils font exactement ce que vous attendez: Insérer ajoute de nouveaux enregistrements, mise à Jour modifie les enregistrements existants et Supprimer supprime des enregistrements.
UPSERT instruction modifie les enregistrements existants, si l'un des dossiers n'est pas présent, il permet d'insérer de nouveaux enregistrements.
La fonctionnalité de UPSERT de tresorerie peut être obtenue par deux nouveaux TSQL opérateurs. Ce sont les deux nouveaux
À l'exception de:-
Retourne toutes les valeurs distinctes de la requête à la gauche de l'opérande mais qui ne sont pas retournés par la requête à droite
Se croisent:-
Retourne toutes les valeurs distinctes qui sont renvoyées par les requêtes sur les côtés gauche et droit de l'INTERSECTION opérande.
Exemple:- disons que nous avons deux tableaux Tableau 1 et le Tableau 2
sera de retour 3,4 car il est présent dans Table_1 pas dans Table_2
sera de retour 1,2,5 comme ils sont présents dans les deux tables Table_1 et Table_2.
Toutes les douleurs des jointures Complexes sont maintenant éliminés 🙂
Pour utiliser cette fonctionnalité dans SSIS, vous n'avez qu'à ajouter un "Execute SQL" de la tâche et de mettre le code n'.
OriginalL'auteur Raj
Une autre façon de créer un upsert en sql (si vous avez pré-phase ou phase de tables):
OriginalL'auteur David Benham
En dehors de T-SQL base de solutions (et ce n'est même pas marqué comme sql/tsql), vous pouvez utiliser un Flux de Données SSIS Tâche avec une Jointure de Fusion tel que décrit ici (et d'ailleurs).
La partie cruciale est la Jointure Externe Complète dans la Fusion Rejoindre (si vous ne voulez insérer/mettre à jour et de ne pas supprimer une Jointure Externe Gauche fonctionne aussi bien) de votre triés sources.
suivie par un Conditionnel Split pour savoir quoi faire ensuite: Insérer dans l'emplacement de destination (qui est aussi ma source ici), le mettre à jour (via la Commande SQL), ou en supprimer (via la Commande SQL).
OriginalL'auteur wp78de
D'habitude, je préfère laisser SSIS, du moteur pour gérer la fusion delta. Que les nouveaux articles sont insérés et modifiées sont mises à jour.
Si votre Serveur de destination ne dispose pas de suffisamment de ressources pour gérer la lourde requête, cette méthode permet d'utiliser les ressources de votre serveur SSIS.
OriginalL'auteur Jonathan Veiler
Je voudrais utiliser la lente évolution de la dimension de la tâche des
OriginalL'auteur Kip Real