Aller au contenu

Transact-SQL

Un article de Wikipédia, l'encyclopédie libre.

LeTransact-SQL (T-SQL)est une extension propriétaire deSybaseetMicrosoftau langageSQL[1].Transact-SQL a été développé à l'origine par la société Sybase, dès les premières versions de sonmoteur de base de donnéesdu même nom. De manière similaire auPL/SQLd'Oracle, Transact-SQL fournissait le moyen d'étendre les fonctionnalités de base du SGBD, via des programmes appelés "procédures stockées". Lecode sourcecommecompilé,est en effet stocké dans la base de données, par opposition aux programmes écrits en langage de programmation classique, dont le code source d'une part, le code compilé d'autre part, sont stockés dans des fichiers du système de fichiers.

Lorsque Microsoft a souhaité étendre son offre logicielle pour inclure un SGBD relationnel, il a passé des accords avec l'un des acteurs de l'époque, le challenger derrière principalement Oracle, RTIIngres,Informix:Sybase. Le SGBD Sybase a été porté surWindows.Microsoft a peu à peu acquis le savoir-faire en matière de SGBD relationnel, et développé son propre moteur de base de données,Microsoft SQL Server,à partir de la souche Sybase. Sybase de son côté a fait évoluer son SGBD, devenu depuisAdaptive Server Enterprise.Transact-SQL est ainsi aujourd'hui le langage de programmation associé à la fois aux SGBD Microsoft SQL Server et SybaseAdaptive Server Enterprise.

Par rapport au SQL, le T-SQL ajoute les fonctionnalités suivantes:

Programmation procédurale[modifier|modifier le code]

Les principaux mots clefs permettant des instructions de programmation procédurale en Transact-SQL sontBEGINetEND,BREAK,CONTINUE,GOTO,IFetELSE,RETURN,WAITFOR,etWHILE.

IFetELSEpermettent des exécutions conditionnelles. L'exemple ci-dessous va afficher "Nous sommes en week-end" si le jour J appartient au week-end, "Nous sommes en semaine" pour un jour de la semaine.

IFDATEPART(dw,GETDATE())=6ORDATEPART(dw,GETDATE())=7
PRINT'Nous sommes en week-end.'
ELSE
PRINT'Nous sommes en semaine.'

BEGINetENDdélimitent un bloc d'instruction. Si plus d'une instruction est nécessaire dans un bloc conditionnel, il faut utiliser BEGIN et END:

IFDATEPART(dw,GETDATE())=6ORDATEPART(dw,GETDATE())=7
BEGIN
PRINT'Nous sommes en week-end.'
PRINT'Faites une pause!'
END
ELSE
BEGIN
PRINT'Nous sommes en semaine.'
PRINT'Vite, au boulot!'
END

WAITFORva permettre de temporiser la procédure, en attendant un certain temps ou un moment précis de la journée.

RETURNest utilisé pour terminer immédiatement l'exécution d'uneprocédure stockéeou bien renvoyer le résultat d'une fonction.

BREAKva terminer le bloc d'une boucleWHILE,tandis queCONTINUEforce l'exécution d'une nouvelle itération de la boucle.

Opérateurs[modifier|modifier le code]

Opérateurs arithmétiques[modifier|modifier le code]

Transact-SQL permet l'utilisation des opérateurs arithmétiques classiques.

  • + (Addition)
  • - (Soustraction)
  • * (Multiplication)
  • / (Division)
  • % (Modulo)

Opérateurs de comparaison[modifier|modifier le code]

  • = (Égal à)
  • > (Supérieur à)
  • < (Inférieur à)
  • >= (Supérieur ou égal à)
  • <= (Inférieur ou égal à)
  • != (Différent de)
  • <> (Différent de), non standardisé par l'ISO
  • !< (Non inférieur à), non standardisé par l'ISO
  • !> (Non supérieur à), non standardisé par l'ISO
  • isnull()

Variables locales[modifier|modifier le code]

Lesvariables localessont souvent utilisées comme compteurs dans des bouclesWHILEou des blocs de typesIF... ELSE.Elles peuvent être utilisées dans des commandes ou dans desprocédures stockées.La procédure utilise ces variables de manièreautomatiqueetnon-interactivelorsqu'elle est exécutée. Les variables locales peuvent être utilisées partout où la syntaxe de Transact-SQL exige l'utilisation d'uneexpression.

Déclaration[modifier|modifier le code]

Ladéclarationde variables locales est similaire à celle delangages impératifsclassiques. Elle suit la syntaxe suivante:

declare@nom_variabletype_données[,@nom_variable type_données]...

Exemples:

declare@aint
declare@bchar(20)
declare@cfloat

OU

declare@aint,@bchar(20),@cfloat

La deuxième syntaxe est plus efficace en termes de mémoire et de performance.

Utilisation dans des sous-routines[modifier|modifier le code]

Une sous-routine assignant une valeur à une variable locale ne doit retourner qu'une seule valeur.

Exemples:

declare@veryhighmoney
select@veryhigh=max(price)
fromtitles
if@veryhigh>$20
print"Aïe!"


declare@onevarchar(18),@twovarchar(18)
select@one="un",@two="deux"
if@one="un"
print@one
if@two="deux"
print@two


declare@tcountint,@pcountint
select@tcount=(selectcount(*)fromtitles),
@pcount=(selectcount(*)frompublishers)
select@tcount,@pcount

Valeur NULL[modifier|modifier le code]

Les variables locales ont initialement pour valeurNULLlorsqu'elles sont déclarées. Elles peuvent également recevoir la valeur NULL d'une commande SELECT. NULL étant une valeur spéciale, la comparaison entre des variables de valeur NULL et d'autres valeurs NULL doit suivre des règles particulières qui sont résumées dans le tableau ci-dessous.
Une expression peut être unevariable,uneconstante,ou une combinaison des deux contenant desopérateurs arithmétiques.

Comparaisons entre valeurs NULL
Type de Comparaison Opérateur = Opérateurs <, >, <=,!=,!<,!>, <>
Comparaison entre deux colonnes de valeur NULL FALSE FALSE
Comparaison entre colonne de valeur NULL et expression NULL FALSE FALSE
Comparaison entre expression NULL et colonne de valeur NULL FALSE FALSE
Comparaison entre deux expressions NULL TRUE FALSE

DELETE et UPDATE[modifier|modifier le code]

Le Transact-SQL permet d'ajouter une clauseFROMaux opérationsDELETEetUPDATE,permettant la jointure de tables.

L'exemple ci-dessous va effacer de la tableutilisateurceux qui ont le drapeau "En attente".

DELETEutilisateur
FROMutilisateurasu
JOINdrapeau_utilisateurasd
ONu.id=d.id
WHEREd.nom='En attente'

Notes et références[modifier|modifier le code]

Voir aussi[modifier|modifier le code]

Sur les autres projets Wikimedia:

Liens externes[modifier|modifier le code]