Dans les faits, SQL est un des gestionnaires de bases de données les plus utilisés au monde. Mais saviez-vous que SQL n'était pas qu'un simple gestionnaire de bases de données ?
En effet, SQL permet plus qu'une simple gestion de données. SQL permet en autre de générer des rapports, il peut aussi servir de relais pour vos courriers mais ce qui nous importes le plus aujourd'hui est la programmation SQL, ou plus précisément T-SQL (Transact SQL). Bref, comme n'importe quel langage, il vous sera possible de faire pratiquement tout ce que vous désirez grâce à T-SQL.
Pourquoi un langage de développement au sein d'une base de données ?
Avec le temps, SQL à vite montrer certaine limite. C'est alors que Microsoft à décidé d'intégré un langage au coeur de son gestionaire de bases de données afin de palier à ces lacunes. Le T-SQL permet ainsi d'écrire des programmes complet, capable de gérer des variables de boucles et autres structures de contrôle. De plus, il permet l'interaction avec les fonctions complexes du système permettant d'écrire de puissants scripts de maintenances et d'administration.
Introduction à T-SQL
Les conventions de nomenclatures :
- Les variables : Débutent toutes par le caractère @, ex : @mavariable
- Les variables systèmes : Débutent par une double @, ex : @@identity
- Les curseurs : Ne sont pas précédés d'un @
- Les procédures stockées : Débutent par sp_
- Les procédures étendues : Débutent par xp
- Les indexes : Débutent par IX_
- Les clés primaires : Débutent par PK
- Les clés étrangères : Débutent par FK
- La mise en commentaire d'une ligne se fait à l'aide de --
- La mise en commentaire d'un paragraphe se fait à l'aide de /* */
Les types d'objets :
- Numeric : Type générique pour les nombres.
- NVarChar : Stocke les chaînes de texte de taille variable, avec en plus les codes du jeu de caractère local, on peut par exemple stocker des caractères japonais.
- VarChar : Similaire au Nvarchar, mais n'implémente pas les jeux de caractère locaux, il occupe donc moins d'espace.
- NText : Stocke les chaînes de texte unicode de grange taille.
- DateTime : Stocke les date, attention il faut les présenter sous le format AAAA-MM-JJ pour êtres sur que la date sera bien interprétée lors d'une insertion. Plusieurs fonctions permettent de modifier le format de la date pour l'affichage.
- Image : Stocke des objets binaires de grande taille tel que des fichiers.
- Real : Type générique pour les nombres réels.
- Bit : Champ booléen / Logique (Vrai/Faux).
- Sql_variant : Type un peu spécial est un fourre-tout. On peut stocker n'importe quel type dedans. Mais attention pour récupérer la valeur que l'on a stockée dedans il faudra impérativement la convertir au format souhaité. À utiliser avec modération!
Déclaration d'une variable :
Declare @MaVariable NVarChar(50)
Les opérateurs disponibles :
- Addition : +
- Soustraction : -
- Multiplication : *
- Division : /
- Modulo : %
- Comparaison : >=, !>, <=, !< , = ; !=
- ET logique : &
- OU logique : |
- XOR : ^
- Concaténation : +
Création d'une procédure stocker SP_, syntaxe de base :
CREATE PROCEDURE [base].[utilisateur].nom
@parametre1 type,
@parametre2 type
AS
BEGIN
Code de la procédure
END
Affectation de variable :
Il existe 2 manières d'affecter une valeur à une variable :
Avec SET :
SET @maVariable = @Resultat
Avec un select :
Select @maVariable = maColonne FROM maTable WHERE maColonne = 'PcKULT.NET'
** Cette dernière ne fonctionne que dans le cas ou le resultat de la requête ne renvoie qu'un seul résultat.
Boucles et structures de contrôle :
If…Else
IF condition
BEGIN
{code}
END
ELSE
BEGIN
{code}
END
CASE
CASE
WHEN condition THEN code
WHEN condition2 THEN autre code
END
Boucle While
WHILE condition
Bloc de code
Les curseurs :
Les curseurs représentent une fonctionnalité très importante en T-SQL. Ce dernier permet le traitement des jeux d'enregistrement multi ligne. Nous allons donc voir comment créer un curseur simple et l'utiliser.
Déclarer un curseur :
DECLARE usager_Cursor CURSOR FOR
SELECT Prénom, Nom FROM MaBD.dbo.Usager WHERE Username like 'P%'
On déclare le curseur en lui spécifiant la requête à exécuter. Il faut ensuite l'ouvrir.
OPEN usager_Cursor
On peut maintenant parcourir les enregistrements du curseur.
FETCH NEXT FROM usager_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM usager_Cursor
END
Le premier FETCH NEXT permet de se placer sur le premier enregistrement contenu dans le curseur, la variable système @@FETCH_STATUS nous donne ensuite l'état du curseur. Tant que celui-ci n'est pas à zéro, nous n'avons pas atteint le dernier enregistrement et nous pouvons continuer à parcourir le curseur. Il est bien entendu possible de mettre le résultat dans des variables au moyen de FETCH NEXT. Une fois le travail terminé il faut fermer et détruire le curseur afin de libérer l'espace occupé par ce dernier.
CLOSE usager_Cursor
DEALLOCATE usager_Cursor
Les curseurs sont bien utile, mais il utilise une grand quantité de ressource mémoire et CPU, donc utiliser les avec modérations.
Ajouter cette page à votre Digg-Like préféré