Sunteți pe pagina 1din 42

TRANSACT-SQL

TRANSACT-SQL
Transact SQL est un langage procdural (par opposition

SQL qui est un langage dclaratif) qui permet de programmer des algorithmes de traitement des donnes au sein des SGBDR Sybase Adaptive Server et Microsoft SQL Server. Il a t cr par Sybase INC. la fin des annes 80 pour rpondre aux besoins d'extension de la programmation des bases de donnes pour son SGBDR. Ce langage est donc commun aux deux produits (MS SQL Server et Sybase Adaptive) avec des diffrences mineures dans les implmentations. Il sert programmer des procdures stockes et des triggers (dclencheurs).

Dclaration d'une Variable:


Pour dclarer une variable, utilisez le mot cl

DECLARE en utilisant la formule suivante : DECLARE Options Noms de variables:


Variable locale:

DECLARE @VariableName DataType; Variable globale: DECLARE @@VariableName DataType; Dclaration multiples: DECLARE @Variable1 DataType1, @Variable2 DataType2, @Variable_n DataType_n;

Les rgles de codage des variables


ne peuvent dpasser 128 caractres.
Ils doivent commencer par une lettre ou un

"underscore". Les caractres spciaux et le blanc ne sont pas admis. On se contentera d'utiliser les 37 caractres de base : ['A'..'Z', '0'..'9', '_'] La casse n'a pas d'importance.

Types de donnes

Type de donnes
Table : Type de donnes spcial qui permet de stocker

un jeu de rsultats pour un traitement ultrieur. Son utilisation principale concerne le stockage temporaire d'un ensemble de lignes, qui doivent tre renvoyes sous forme de jeu de rsultats d'une fonction table. Une variable de type table se comporte comme une variable locale. Elle possde une porte bien dfinie, qui reprsente la fonction, la procdure stocke ou le lot d'instructions dans lequel elle est dclare.

Initialisation d' une Variable


La formule utilise est la suivante : SELECT @VariableName = DesiredValue ou SET @VariableName = DesiredValue Initialisation multiple: avec Select seulement

select @i=3,@j=4,@str='TSDI

Affichage des valeurs


Ds qu'une variable a t initialise, vous pouvez

rendre sa valeur disponible ou l'afficher selon deux sorties:


Affichage Table avec SELECT:

Select @i
Affichage Message avec PRINT:

Print Chaine de caractre

Exemple
DECLARE @FirstName nvarchar(20), @LastName nvarchar(20), @FullName nvarchar(40), @DateHired date, @EmplStatus int,

@IsMarried bit, @WeeklyHours decimal(6,2), @HourlySalary SmallMoney, @WeeklySalary SmallMoney; SET @FirstName = N'Samuel'; SET @LastName = N'Weinberg'; SET @FullName = @LastName + N', ' + @FirstName; SET @DateHired = N'12/05/1998'; SET @IsMarried = 1; SET @EmplStatus = 2; SET @WeeklyHours = 36.50; SET @HourlySalary = 15.72; SET @WeeklySalary = @WeeklyHours * @HourlySalary; SELECT @FullName As [Full Name], @DateHired AS [Date Hired], @EmplStatus AS [Empl Status], @IsMarried AS [Married?], @WeeklyHours AS Hours, @HourlySalary AS Hourly, @WeeklySalary AS Weekly;

Exemple de variable de type table :


Declare @stg table(numInsc int primary key, nom varchar(20), prenom varchar(20),moyenne numeric(4,2)) /*la particularit des variables de type table, est quon peut utiliser des commandes insert, select,update, delete */ insert into @stg values(103,'LAAROUSSI','SALAH',14) insert into @stg values(107,'AADISSA','Youness',14.5) insert into @stg values(200,'SOQRAT','Sanaa',12.5) select * from @stg

Bloc dinstructions
Un bloc dinstruction est un ensemble dinstruction T-

SQL qui sont considr comme un tout ( une seule). Un bloc dinstruction peut contenir dautres sous blocs.
Begin --instruction(1) --instruction(2) --instruction(N) end

Instructions conditionnelles
Si une condition est True:
IF [NOT] condition instruction[ELSE instruction]

Exemple: DECLARE @DateEmbauche datetime, @CurrentDate datetime SET @DateEmbauche = '04/10/2010 ' SET @CurrentDate = ' 11/04/2011 ' IF @DateEmbauche < @CurrentDate PRINT 'Exprience exige' ELSE PRINT 'Bienvenue';

Instructions conditionnelles
IF [NOT] EXISTS(requte select) instruction [ELSE instruction]

Exemple2:
if exists ( select * from pilote where ville = 'tanger') print 'il exist des pilotes tangerois' else print 'aucun pilote nest tangerois'

Instructions conditionnelles
CASE: La fonction CASE est une expression Transact-

QL spciale qui permet l'affichage d'une valeur de remplacement en fonction de la Valeur d'une colonne. Ce changement est temporaire. Par consquent, aucune Modification permanente n'est apporte aux donnes. Syntaxe:
CASE expression WHEN valeur1 THEN rsultats WHEN Value2 THEN rsultats WHEN Value_n THEN rsultats END

Instructions conditionnelles
Exemple:
SELECT marque,capacite, CASE WHEN capacite<=400 THEN 'Petit avion' WHEN capacite<600 and capacite>=400 THEN 'Avion Moyen' WHEN capacite>=600 THEN 'Grand Avion' END AS 'Comentaire' FROM avion ORDER BY capacite

Instructions itrative
WHILE condition instruction
DECLARE @Numro As int SET @numro = 1 WHILE @numro < 5 BEGIN SELECT @ numro as numro SET @ numro = @numro + 1 END

Fonctions utilisateur
Les fonctions utilisateurs sont de trois types. Il y a les

fonctions scalaires, les fonctions tables en ligne et les fonctions multi-instructions. Une fonction peu accepter des arguments, et ne peu retourner que deux types de donnes : une valeur scalaire ou une table. Le champ daction dune fonction est vraiment limit puisquil nest possible de modifier que des objets locaux la fonction. Il nest pas possible de modifier des objets de la base, contenus lextrieur de la fonction.

Cration dune fonction


partir de lexplorateur dobjets:

Avec du code:

CREATE FUNCTION FunctionName ()

Type de retour dune fonction


Pour qu'une fonction soit utile, elle doit produire un

rsultat. Lors de la cration d'une fonction, vous devez spcifier le type de valeur que la fonction renverrait. Pour fournir cette information, aprs le nom de la fonction, tapez le mot-cl RETURNS suivi d'une dfinition pour un type de donnes. Voici un exemple simple :

CREATE FUNCTION Addition() RETURNS Decimal(6,3)

CORPS DE LA FONCTION
Le corps d'une fonction commence

par BEGIN et se termine avec les mots-cls END. END Entre les mots-cls BEGIN et END, qui est la section qui reprsente le corps de la fonction, vous pouvez dfinir l'affectation que doit excuter la fonction. Aprs l'excution de cette affectation, juste avant le mot-cl END, vous devez spcifier la valeur renvoye par la fonction.

CREATE FUNCTION Addition() RETURNS Decimal(6,3) [AS] BEGIN

La valeur de retour
La valeur renvoye par la fonction est faite en tapant le

mot-cl RETURN, suivi d'une expression. La formule est la suivante :


CREATE FUNCTION Addition() RETURNS Decimal(6,3) AS BEGIN RETURN expression END

Appel d'une fonction


Pour appeler une fonction, vous devez qualifier son

nom. Pour le faire, saisissez le nom de la base de donnes dans laquelle il a t cr, suivi du schma dbo , suivi du nom de la fonction et ses parenthses. La formule utiliser est la suivante : On utilise PRINT ou SELECT pour afficher la valeur de la fonction dans une fentre de requte:
DatabaseName .dbo. FunctionName ()

Exemple
Exemple
CREATE FUNCTION Addition() RETURNS int BEGIN DECLARE @Number1 int SET @Numro1 = 588 RETURN @Number1 + 1450 END

Appel de fonction:

Select tdi22.dbo.addition() as addition

Une fonction paramtre


Afin de remplir ses missions, une fonction peut tre

fournie avec certaines valeurs. Une valeur externe qui est fournie une fonction est appele un paramtre. Une fonction peut galement prendre plusieurs paramtres. Dans le corps de la fonction, vous pouvez utiliser les paramtres comme si vous connaissiez dj leur valeur.

CREATE FUNCTION Addition(@Number1 Decimal(6,2), @Number2 Decimal(6,2))

Exemple
CREATE FUNCTION Addition(@Number1 Decimal(6,2), @Number2 Decimal(6,2)) RETURNS Decimal(6,2) BEGIN DECLARE @Result Decimal(6,2) SET @Result = @Number1 + @Number2 RETURN @Result END;

PRINT TDI22.dbo.Addition(1450, 228) ;

Exemples:
Ecrire une fonction qui accepte en paramtre une

marque davion et qui retourne le nombre davions de cette marque.


create function nbreAvion(@marque varchar(20)) returns int as begin declare @nbre int select @nbre = count(*) from avion where marque = @marque return @nbre end

Exemple
Ecrire une fonction qui retourne la liste des pilotes qui ont vol

Paris.
create function PiloteParis() returns @tbl table( num int , nom varchar(20) ) as begin insert into @tbl(num,nom) select pil# , nom from pilote left join vol on pilote.pil# = vol.pilote where villearrivee = 'casa' Return end create function PiloteParis() Returns table as Return select pil# , nom from pilote left join vol on pilote.pil# = vol.pilote where villearrivee = 'casa;

Rq: Etant donn que cette fonction ne contient qu'une seule

instruction, il est possible de la dfinir de la faon suivante:

Types de fonctions
Le type de fonction change selon son type de retour: Fonction scalaire: retourne une valeur scalaire
RETURNS return_data_type [ AS ] BEGIN function_body RETURN scalar_expression END [ ; ]

Fonction Table : retourne une table qui est le rsultat dune

instruction SELECT.

Fonction en ligne
RETURNS TABLE [ AS ] RETURN [ ( ] select_stmt [ ) ] [ ; ]

Fonction multi-instructions
RETURNS @return_variable TABLE < table_type_definition > [ AS ] BEGIN function_body RETURN END [ ; ]

Les curseurs- dfinition


Dans SQL Server, un curseur est un objet qui nous

permet dexcuter un traitement sur un ensemble denregistrements. Les curseurs sont des outils trs puissants, mais aussi trs gourmands en ce qui concerne les ressources. Il est donc conseill de modifier des lignes de rsultat de manire traditionnelle, avec un simple UPDATE ou une autre instruction du DML, afin de consommer le moins de ressources possibles.

Dclaration des curseurs


DECLARE cursor_name CURSOR FOR select_statement

cursor_name : Nom du curseur de serveur Transact-

SQL dfini. select_statement : Instruction SELECT standard qui dfinit le jeu de rsultats du curseur.

Les curseurs
OPEN: Cette instruction permet de remplir le curseur

par le jeu de rsultat de SELECT et le rendre ainsi utilisable.


Syntaxe:
OPEN Cursor-name

FETCH: Cest linstruction qui permet dextraire une

ligne du curseur et de valoriser les variables et leur contenu. @@FETCH_STATUS : cest une variable globale qui tablit un rapport d'tat de la dernire instruction FETCH: Si lexcution du FECTCH sest bien passe , la variable globale @@FETCH_STATUS est 0.

Les curseurs
Syntaxe:
FETCH (arguments) Nom_Curseur INTO Liste_Variable

Arguments: NEXT: Lit la ligne suivante. PRIOR: Lit la ligne prcdente. FIRST: Lit la premire ligne. LAST: Lit la dernire ligne. ABSOLUTE p: Lit la Pime ligne de lensemble. RELATIVE p: avance de p position (si n ngatif recule de p position) Liste_Variable: autant de variable que de colonne dans lordre SELECT

Les curseurs
CLOSE: Cette instruction permet la fermeture du

curseur et la libration de la place mmoire o il t contenu. Il est important de faire intervenir cette opration ds que possible dans le souci de librer les ressources.
Syntaxe:
CLOSE Nom_Curseur

DEALLOCATE : Cette instruction permet de

supprimer le curseur et les ressources associes.


Syntaxe:
DEALLOCATE Nom_Curseur

Exemple
Soit la table avion:

Afficher les marques des avions avec leur types sous le

forme suivante:
Marque : AIRBUS - Type: A Marque : Airbus - Type: civile Marque : Boeing - Type: civile Marque : F5 - Type: militaire Marque : TEST - Type: T

Declare @Marque varchar(20), @type varchar(20) DECLARE Avion_cursor CURSOR FOR SELECT distinct (marque), typeAvion FROM Avion OPEN Avion_cursor FETCH NEXT FROM Avion_cursor INTO @marque, @type While @@FETCH_STATUS=0 begin print 'Marque : ' + @Marque + ' - Type: ' + @type FETCH NEXT FROM Avion_cursor INTO @Marque, @type End CLOSE Avion_cursor DEALLOCATE Avion_cursor GO

Exemple
Afficher les marques des avions avec leur types sous le

forme suivante:
Marque : AIRBUS Type : -A - civile Marque : Boeing Type : - civile Marque : F5 Type : - militaire Marque : TEST Type : -T

Declare @Marque varchar(20), @type varchar(20) DECLARE Avion_cursor CURSOR FOR SELECT distinct (marque) FROM Avion OPEN Avion_cursor FETCH NEXT FROM Avion_cursor INTO @marque While @@FETCH_STATUS=0 begin print 'Marque : ' + @Marque print ' Type :' DECLARE Type_cursor CURSOR FOR SELECT DISTINCT typeAvion From Avion where marque = @marque OPEN Type_cursor FETCH NEXT FROM Type_cursor INTO @type while @@fetch_status=0 begin print ' - ' + @type FETCH NEXT FROM Type_cursor INTO @type end CLOSE type_cursor DEALLOCATE type_cursor FETCH NEXT FROM Avion_cursor INTO @Marque End CLOSE Avion_cursor DEALLOCATE Avion_cursor

S-ar putea să vă placă și