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.