IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[2005] UPDATE FROM sans FROM


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut [2005] UPDATE FROM sans FROM
    Bonjour,

    j'ai une question à laquelle je pense avoir la réponse mais j'aimerais vérifier cela car cette réponse me déplaît.
    Lorsque l'on doit mettre à jour une table sur base d'informations venant d'une ou plusieurs tables, on utilise habituellement (en sql server) la clause UPDATE... FROM.
    Seulement, voilà, je me retrouve dans un cas où je ne peux pas utiliser cette syntax (update sur view) et je me retrouve avec la contre performance d'un update sans from.

    Voici mon query :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ; WITH Data AS (
    		SELECT 
    			CM.IdClub
    			, EXT.BeginMembership
    			, EXT.Membership
    		FROM  MyGolf.dbo.tClubMembers AS CM
    		CROSS APPLY (
    			SELECT TOP(1)
    				NMS.BeginMembership
    				, NMS.Membership
    			FROM @tNMemberShip AS NMS
    			WHERE CM.IdClub = NMS.IdClub
    			ORDER BY NMS.Membership DESC
    		)	AS EXT
    		WHERE CM.IdMember = @IdMember
    	)
    	UPDATE MyGolf.dbo.vDATA_tClubMembers
    	SET 
    		BeginMembership = (
    			SELECT TOP(1)
    				BeginMembership
    			FROM Data
    			WHERE Data.IdClub = vDATA_tClubMembers.IdClub		)
    		, Membership = (
    			SELECT TOP(1)
    				Membership
    			FROM Data
    			WHERE Data.IdClub = vDATA_tClubMembers.IdClub		)
    		, ViaSynchro = @ViaSynchro
    	WHERE IdMember = @IdMember
    	AND EXISTS (
    		SELECT TOP(1)
    			1
    		FROM Data
    		WHERE Data.IdClub = vDATA_tClubMembers.IdClub
    	)
    Le sous query est donc excécuté intégrallement 3 fois!
    Ce n'est pas une surprise.

    J'aimerais savoir s'il existe une méthode plus efficace?


    Pour rappel : MERGE n'exite pas en SQL Server 2005.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Personne pour me dire même "Non" ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pas à ma connaissance !

Discussions similaires

  1. Variable dans le FROM ou FROM composé , FROM ajustable
    Par V i n c e n t dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/05/2014, 19h02
  2. Réponses: 9
    Dernier message: 02/08/2013, 10h27
  3. Update Set Select From
    Par lamen0031 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 23/09/2011, 15h16
  4. Réponses: 6
    Dernier message: 20/11/2007, 12h14
  5. SP1 Visual Studio 2005 + Update Pour Vista
    Par The_badger_man dans le forum Visual Studio
    Réponses: 1
    Dernier message: 13/06/2007, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo