vendredi 25 juin 2010

Common Table Expression (CTE)

Les CTE (common Table Expression) peuvent être vu comme des results set temporaires.
Les CTE sont plus facile à utiliser que les tables temporaires et permettent une utilisation récursive (voir article Recursive Queries using CTE sur MSDN).
La durée de vie d'une CTE est limitée à l'exécution de la requête.
Pour plus d'information, voir l'article Using Common Table Expressions sur MSDN.

Les CTE deviennent utiles lorsque l'on doit appliquer une where clause sur un champ du query dont la valeur est non deterministe.
A titre d'exemple, un query dont le champs txt varchar(80) est calculé via une fonction utilisant un curseur sql (cela peut arriver si l'on doit faire des manipulations complexes sur les données pour composer le texte).
Si l'on désire n'afficher que lignes ayant plus d'un caractère, un select standard ne peut pas convenir.

Exemple:

En déclarant la fonction suivante (utilisée dans l'exemple ci-après):
Create function dbo.ChangeText( @txtIn varchar(50) )
returns Varchar(50) 
AS
BEGIN
  Return @TxtIn + '~Test~'
END

Il n'est pas possible d'exécuté la requête suivante:
select NameFr, dbo.ChangeText( NameFr ) as txt
FROM Apb.COUNTRY
where LEN( txt ) > 1

Erreur Sql:
Msg 207, Level 16, State 1, Line 3
Invalid column name 'txt'.

Par contre, l'usage d'un Common Table Expression d'atteindre l'objectif en stockant temporairement le dataset dans cte_Names.
Par la suite, le contenu de cte_Names est utilisé pour atteindre le résultat souhaité (à l'aide d'une seconde requête sql).
with cte_Names ( NameFr, txt )
AS (
   select NameFr, dbo.ChangeText( NameFr )
   FROM Apb.COUNTRY)
  
select NameFr, txt
FROM cte_Names
where LEN( txt ) > 1

Plus d'information

vendredi 18 juin 2010

Documentation C#: LinQ, Serialization, Generics et File Processing

Bien que LinQ soit déjà utilisé dans les exemples C# que j'ai publié, rien ne faut une excellente référence avec exemples concrets.
C'est ainsi qu'en plus d'un préambule sommaire sur LinQ,  l'on apprendra à utiliser plusieurs listes, à les ordonnés, à utiliser les prédicats, à recréer de nouvelles listes (grâce aux types anonymes), etc.

C# - Lesson 36 Querying a List disponible sur FunctionX.

Ce site propose d'autres articles intéressants:

Noces de mariage

Voici une liste des noces de mariage assez complète... au moins il y a du plaisir pour les premières années si on ne manque pas d'inspiration.


Années de mariage - Noces de
1:    Coton
2:    Cuir
3:    Froment
4:    Cire
5:    Bois
6:    Cypre
7:    Laine
8:    Coquelicot
9:    Faïence
10:    Etain
11:    Corail
12:    Soie
13:    Muguet
14:    Plomb
15:    Cristal
16:    Saphir
17:    Rose
18:    Turquoise
19:    Cretonne
20:    Porcelaine
21:    Opale
22:    Bronze
23:    Béryl
24:    Satin
25:    Argent
26:    Jade
27:    Acajou
28:    Nickel
29:    Velours
30:    Perle
31:    Basane
32:    Cuivre
33:    Porphyre
34:    Ambre
35:    Rubis
36:    Mousseline
37:    Papier
38:    Mercure
39:    Crêpe
40:    Emeraude
41:    Fer
42:    Nacre
43:    Flanelle
44:    Topaze
45:    Vermeil
46:    Lavande
47:    Cachemire
48:    Améthyste
49:    Cèdre
50:    Or
60:    Diamant
70:    Platine
75:    Albâtre
80:    Chêne

Source: cet article sur "les noces de mariages"