Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2011, 08h49   #1
Candidat au titre de Membre du Club
 
Développeur Web
Inscription : janvier 2011
Messages : 48
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2011
Messages : 48
Points : 13
Points : 13
Par défaut Update table vers table

Bonjour,
j'ai deux tables: une table A et une table B qui ont une structure identique.

La structure:
[ID] [Type] [Contenu]

Je dois mettre à jour toutes les lignes de la table A qui ont l'association [ID][Type] present dans la table B mais dont le contenu est différent.

Je ne pense pas que ça soit compliqué mais je ne sais pas trop comment structurer cette requête.

Merci d'avance.
Kirua76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 09h08   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

C'est parti :

Code :
1
2
3
4
5
6
7
UPDATE		dbo.A
SET		Contenu = B.Contenu
FROM		dbo.A AS A
INNER JOIN	dbo.B AS B
			ON A.ID = B.ID
			AND A.Type = B.Type
			AND A.Contenu <> B.Contenu
Vous pouvez éventuellement vous passer de AND A.contenu <> B.Contenu, ce qui aura pour effet de mettre à jour toutes les lignes.
La vitesse d'exécution sera à priori la même, puisque SQL Server ne maintient pas de statistiques de colonne sur les possibles valeurs différentes de celles qui sont dans la colonne Contenu

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 09h42   #3
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Autre solution :

Code :
1
2
3
4
5
6
7
UPDATE dbo.A
SET contenu = B.contenu
FROM dbo.B AS B
WHERE NOT EXISTS (SELECT * FROM dbo.A AS A
                  WHERE A.ID = B.ID
                   AND A.[Type] = B.[Type]
                    AND A.[Contenu] = B.[Contenu])
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 09h54   #4
Candidat au titre de Membre du Club
 
Développeur Web
Inscription : janvier 2011
Messages : 48
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2011
Messages : 48
Points : 13
Points : 13
merci beaucoup
Kirua76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h47.


 
 
 
 
Partenaires

Hébergement Web