Partage de sessions : Autres possibilités

Ce billet fait partie de la série « Partage de sessions » :

  1. Présentation
  2. Gestion native des sessions en .Net
  3. Focus, State Server
  4. Focus, SQL Server
  5. Focus, Couchbase
  6. Autres possibilités (ce billet)
  7. Conclusion
  8. Annexes

Dans ce billet, nous allons voir quelques autres providers.

Je n’ai pas réalisé de PoC pour les différentes solutions proposées ici. J’avais certaines contraintes qui étaient incompatibles avec ses solutions (relire Legacy Applications pour comprendre, partie « Risques technologiques »). Du coup, je ne peux pas juger de leurs fonctionnalités/pertinences. Ce sont des pistes à creuser si vous en avez le besoin.

Lire la suite…

Catégories :.Net, Développement

Partage de sessions : Focus, Couchbase

Ce billet fait partie de la série « Partage de sessions » :

  1. Présentation
  2. Gestion native des sessions en .Net
  3. Focus, State Server
  4. Focus, SQL Server
  5. Focus, Couchbase (ce billet)
  6. Autres possibilités
  7. Conclusion
  8. Annexes

Dans ce billet, nous allons voir ce qu’est Couchbase, ses avantages et inconvénients et comment le mettre en place.

Lire la suite…

Catégories :.Net, Développement

Partage de sessions : Focus, SQL Server

Ce billet fait partie de la série « Partage de sessions » :

  1. Présentation
  2. Gestion native des sessions en .Net
  3. Focus, State Server
  4. Focus, SQL Server (ce billet)
  5. Focus, Couchbase
  6. Autres possibilités
  7. Conclusion
  8. Annexes

Dans ce billet, nous allons voir ce qu’est la gestion de session via SQL Server, ses avantages et inconvénients et comment le mettre en place.

Lire la suite…

Catégories :.Net, Développement

Partage de sessions : Focus, State Server

Ce billet fait partie de la série « Partage de sessions » :

  1. Présentation
  2. Gestion native des sessions en .Net
  3. Focus, State Server (ce billet)
  4. Focus, SQL Server
  5. Focus, Couchbase
  6. Autres possibilités
  7. Conclusion
  8. Annexes

Dans ce billet, nous allons voir ce qu’est le State Server, ses avantages et inconvénients et comment le mettre en place.

Lire la suite…

Catégories :.Net, Développement

Partage de sessions : Gestion native des sessions en .Net

Ce billet fait partie de la série « Partage de sessions » :

  1. Présentation
  2. Gestion native des sessions en .Net (ce billet)
  3. Focus, State Server
  4. Focus, SQL Server
  5. Focus, Couchbase
  6. Autres possibilités
  7. Conclusion
  8. Annexes

Dans ce billet, nous allons voir les différentes possibilités qu’offrent directement le Framework .Net.
Ce billet sera relativement court, car il sera décomposé dans les différents focus suivants.

Lire la suite…

Catégories :.Net, Développement

Partage de sessions : Présentation

Il y a quelques temps, j’ai eu l’occasion de travailler sur un sujet assez sympa mais un peu complexe : le partage de session en différents applicatifs.
J’ai eu à fournir un bon gros document pour l’état de l’art, des démonstrations (POC) et sur la possibilité de l’appliquer chez le client où je suis actuellement.
Du coup, je me suis dis qu’une (petite) partie du travail réalisé pourrait intéresser d’autres personnes.

Je vais tenter de faire quelque chose de digeste, mais vu le sujet, c’est pas garantie ! ^^
Donc, le tout sera éclaté en plusieurs parties que je vais publier au fil de mes relectures.

Dans ce premier billet, je vais présenter le plan ainsi que de brefs résumés de ce qui sera traité dans chaque partie, ainsi que le tronc commun des différents POCs.
Quand je parle de différents applicatifs, cela peut aller d’un mix PHP/ASP.Net WebForm, ASP/ASP.Net WebForm, ASP.Net WebForm/ASP.Net MVC…

Les POCs traiteront uniquement du cas ASP.Net WebForm vs ASP.Net MVC.

 

Sommaire

 

  1. Présentation (ce billet)
  2. Gestion native des sessions en .Net
  3. Focus, State Server
  4. Focus, SQL Server
  5. Focus, Couchbase
  6. Autres possibilités
  7. Conclusion
  8. Annexes

Lire la suite…

Catégories :.Net, Développement

Instruction MERGE

Ça fait un petit moment maintenant que je vois des instructions de ce genre, dans des scripts de données :

IF EXISTS (SELECT * FROM Client WHERE Nom = 'Legrand' AND Prenom = 'Lucas')
	BEGIN
		PRINT 'UPDATE'
		UPDATE Client
		SET Email = 'lucas.legrand@live.com'
		WHERE Nom = 'Legrand' AND Prenom = 'Lucas'
	END
ELSE
	BEGIN
		PRINT 'INSERT'
		INSERT INTO Client
		VALUES ('Legrand', 'Lucas',
				'lucas.legrand@live.com',
				'107 rue de Lille, 75007 PARIS')
	END

Le gros problème, c’est que s’il y a beaucoup de données (surtout de références), ça va multiplier les blocs comme des petits pains (ce qui peut être sympa, mais ce n’est pas le sujet).

C’est là que le sauveur arrive, sous la forme de l’instruction MERGE.

Pour obtenir l’équivalent avec MERGE, on écrira :

MERGE Client AS target
USING (VALUES 
   ('lucas.legrand@live.com', 'Legrand', 'Lucas', '107 rue de Lille, 75007 PARIS'),
   ('julienne.jeremi@hotmail.fr', 'Jeremi', 'Julienne', '146 rue de Lyon, 75012 PARIS'))
	AS source (Email, Nom, Prenom, Adresse)
ON (target.Nom = source.Nom AND target.Prenom = source.Prenom)
WHEN MATCHED
	THEN UPDATE
		SET target.Email = source.Email
WHEN NOT MATCHED BY target
	THEN INSERT (Nom, Prenom, Email, Adresse)
	VALUES (source.Nom, source.Prenom, source.Email, source.Adresse);

-- Ou, en utilisant une structure (temporaire ou non) existante
	
CREATE TABLE #temp (
   Nom varchar(50) NULL,
   Prenom varchar(50) NULL,
   Email varchar(50) NULL,
   Adresse varchar(250) NULL)

INSERT INTO #temp
VALUES 
   ('lucas.legrand@live.com', 'Legrand', 'Lucas', '107 rue de Lille, 75007 PARIS'),
   ('julienne.jeremi@hotmail.fr', 'Jeremi', 'Julienne', '146 rue de Lyon, 75012 PARIS');
-- A noter : le ";" pour séparer les deux instructions
MERGE Client AS target
USING (SELECT Email, Nom, Prenom, Adresse FROM #temp) AS source
ON (target.Nom = source.Nom AND target.Prenom = source.Prenom)
WHEN MATCHED
	THEN UPDATE
		SET target.Email = source.Email
WHEN NOT MATCHED BY target
	THEN INSERT (Nom, Prenom, Email, Adresse)
	VALUES (source.Nom, source.Prenom, source.Email, source.Adresse);
	
DROP TABLE #temp

-- Fonctionne aussi avec les CTE
WITH clients AS (SELECT TOP 10 Nom, Prenom, Email, Adresse FROM Client)
MERGE Client AS target
USING (SELECT Email, Nom, Prenom, Adresse FROM clients) AS source
ON (target.Nom = source.Nom AND target.Prenom = source.Prenom)
WHEN MATCHED
	THEN UPDATE
		SET target.Email = source.Email
WHEN NOT MATCHED BY target
	THEN INSERT (Nom, Prenom, Email, Adresse)
	VALUES (source.Nom, source.Prenom, source.Email, source.Adresse);

Je ne vais pas détailler les trois blocs puisqu’ils font des choses équivalents, mais attirer l’attention sur le premier et en particulier les lignes 7, et 10.

Pour la ligne 6 : c’est une jointure tout ce qu’il y a de plus banal, comme celle que l’on peut réaliser avec l’instruction « JOIN » (ou « INNER JOIN », c’est la même chose).

Pour les lignes 7 et 10 : on peut voir qu’il est possible de réaliser des actions si les lignes correspondent à la jointure.

Ainsi, il est possible de faire des actions :

  • Si elles correspondent : « WHEN MATCHED », il est alors possible d’utiliser les instructions UPDATE ou DELETE
  • Si elles ne correspondent pas : « WHEN NOT MATCHED BY « , il est alors possible d’utiliser les instructions UPDATE et DELETE

Par défaut, l’action dans le « NOT MATCHED » s’applique à ce qui est spécifié après le « BY ».
Ainsi, il ne faut pas non plus le spécifier par la suite.

Note : dans le 2nd cas, il FAUT ajouter le point-virgule pour séparer l’instruction MERGE de la création/alimentation de la table temporaire.
Si ce n’est pas fait, vous aurez droit à une erreur :

Msg 325, Level 15, State 1, Line 6
Syntaxe incorrecte près de 'MERGE'. Vous devrez peut-être affecter au niveau de compatibilité de la base de données actuelle une valeur plus élevée pour activer cette fonctionnalité. Reportez-vous à l'aide relative à l'option SET COMPATIBILITY_LEVEL de ALTER DATABASE.
Msg 156, Level 15, State 1, Line 7
Syntaxe incorrecte vers le mot clé 'AS'.
Catégories :Développement, Sql Server
Suivre

Recevez les nouvelles publications par mail.

Rejoignez 60 autres abonnés