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 :
Le sous query est donc excécuté intégrallement 3 fois!
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 )
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.
Partager