Vous êtes sur la page 1sur 67

http://www.labo-dotnet.

com

Auteur : Steve Beaug


Version 1.0 03 dcembre 2002

Ecole Suprieure dInformatique de Paris


23. rue Chteau Landon 75010 PARIS

www.supinfo.com

SQL Server 2000


SUPINFO DOT NET TRAINING COURSES

SQL Server

2 / 67

Table des matires


1. QUEST CE QUE SQL SERVER ?...................................................................................................................4
2. INSTALLATION ET CONFIGURATION DE SQL SERVER 2000..............................................................5
2.1. INSTALLATION DU SERVEUR............................................................................................................................5
2.1.1. Configuration requise.............................................................................................................................5
2.1.2. Etape n1 : Menu CDRom SQL Server...................................................................................................6
2.1.3. Etape n2 : Choix du programme installer..........................................................................................7
2.1.4. Etape n3 : Options dinstallations........................................................................................................8
2.1.5. Etape n4 : Choix des composants.........................................................................................................9
2.1.6. Etape n5 : Choix du type dinstallation...............................................................................................11
2.1.7. Etape n 6 : Choix du compte de service..............................................................................................12
2.1.8. Etape n7 : Mode dauthentification....................................................................................................13
2.1.9. Etape n8 : Fin dinstallation...............................................................................................................14
3. PRSENTATION DES OUTILS DENTREPRISE......................................................................................15
3.1. SERVICE MANAGER.......................................................................................................................................15
3.2. ENTERPRISE MANAGER.................................................................................................................................16
3.2.1. Ajouter un serveur Enterprise Manager............................................................................................17
3.2.2. Configurer le serveur............................................................................................................................19
3.2.3. Crer une base de donne.....................................................................................................................20
3.2.4. Crer ou modifier une table..................................................................................................................21
3.2.5. Modliser la base de donnes...............................................................................................................22
3.2.6. Construction visuelle de vues...............................................................................................................22
3.2.7. Editeur de procdures stockes.............................................................................................................23
3.2.8. Conclusion............................................................................................................................................24
3.3. ANALYSEUR DE REQUTES............................................................................................................................24
4. TCHES ADMINISTRATIVES COURANTES............................................................................................27
4.1. TCHES DE POST-INSTALLATIONS.................................................................................................................27
4.1.1. Lancement du serveur...........................................................................................................................27
4.1.2. Configurations diverses........................................................................................................................27
4.1.3. Configurer la prise en charge de SQL XML dans IIS...........................................................................29
4.1.4. Accder aux donnes............................................................................................................................32
4.1.5. Utilisation dun template......................................................................................................................32
4.1.6. Encore plus fort, lutilisation de feuilles de style.................................................................................33
5. INTRODUCTION AU TRANSACT SQL.......................................................................................................36
5.1. QUEST CE QUE LE T-SQL (TRANSACT SQL)...............................................................................................36
5.2. NORTHWIND ............................................................................................................................................36
5.3. COMMENTAIRES............................................................................................................................................38
5.4. VARIABLES...................................................................................................................................................38
5.4.1. Dclaration...........................................................................................................................................38
5.4.2. Types de donnes..................................................................................................................................39
5.4.3. Utilisation des variables :.....................................................................................................................40
5.4.4. Types de donnes utilisateur.................................................................................................................41
5.5. IF / ELSE......................................................................................................................................................41
5.6. WHILE.........................................................................................................................................................43
5.7. GOTO / LABEL...........................................................................................................................................45
5.8. CASE (SIMPLE).............................................................................................................................................46
5.9. CASE (RECHERCHE).....................................................................................................................................47
5.10. INTGRATION DE SQL..................................................................................................................................47
5.11. PROCDURES STOCKES................................................................................................................................50
5.11.1. Dclarer une procdure stocke...........................................................................................................50
5.11.2. Modification dune procdure stocke existante..................................................................................51
5.11.3. Appel dune procdure stocke.............................................................................................................51
5.11.4. Paramtres............................................................................................................................................51
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

3 / 67

5.11.5. Paramtres optionnels..........................................................................................................................52


5.11.6. Direction des paramtres......................................................................................................................54
5.11.7. Procdures stockes systmes et prdfinies........................................................................................55
5.12. TRANSACTIONS.............................................................................................................................................56
5.12.1. Utilit....................................................................................................................................................56
5.12.2. Exemple :..............................................................................................................................................56
5.13. CURSEURS.....................................................................................................................................................62
6. CONCLUSION..................................................................................................................................................65

Prrequis :
Ce document est destin aux utilisateurs ayant une premire exprience du SQL standard.
Vous devriez donc connatre avant de lire ce document :
Les clauses de bases : SELECT, INSERT, UPDATE et DELETE
Cration de jointures, WHERE, INNER JOIN, CROSS JOIN, etc.
Et bien sr, les concepts gnraux de la base de donnes.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

4 / 67

1. Quest ce que SQL Server ?


SQL Server 2000 est la dernire version du SGBDR de Microsoft (Systme de Gestion de Base de
Donnes Relationnelles). Il est particulirement adapt aux systmes dE-Business et de DataWare
Housing (on parle aussi de Workflow). Cette dernire version inclut un support XML et HTTP,
permettant daccder aux donnes depuis un navigateur, ou dune application pouvant crer des
requtes HTTP.
Ses avantages sont multiples :

Performant : SQL Server se classe parmi les SGBDR les plus rapides
(www.microsoft.com/sql/worldrecord).
Evolutif et fiable : vous pouvez rpartir la charge sur plusieurs serveurs, bnficier des
avantages des systmes multi-processeurs (SMP Sysmetric Multi Processing) et profiter des
performances de Windows 2000 DataCenter Server qui supporte 32 processeurs et 64 GO de
ram).
Rapidit de mise en uvre : avec SQL Server, le dveloppement, le dploiement et
ladministration dapplications destines au Web sont acclrs grce aux nombreuses
fonctionnalits ddies, ainsi quau support du Web.

Pour dcouvrir les fonctionnalits de SQL Server, rendez vous cette adresse :
http://www.microsoft.com/france/sql/decouvrez/fonction.asp qui vous prsentera chacune des
fonctionnalits.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5 / 67

2. Installation et configuration de SQL


Server 2000
2.1.

Installation du serveur

Je vais prsenter ici comment installer la version dveloppeur de SQL Server car la principale
cible de ce document sont les dveloppeurs. Linstallation dune autre version ne change que peu,
lexception de la version Desktop (MSDE) qui est prvu pour tre automatise et redistribue. Les
versions PocketPC sortent galement du cadre de ce chapitre du fait de la spcificit de la plateforme.
Dans ces cas, reportez vous aux documentations spcifiques de chaque version.

2.1.1.

Configuration requise

Voici la configuration requise pour linstallation de SQL Server selon Microsoft :


Processeur Intel Pentium 166Mhz ou suprieur.
Mmoire vive de 64Mo si lenvironnement est Windows 2000. Notez galement que pour la
version entreprise, 64Mo suffisent mais il est vivement recommand davoir 128 ou plus pour
pouvoir supporter une charge importante dans le cadre dun serveur de production.
Espace disque entre 95 et 270 Mo selon les options installes (250Mo pour une installation
standard)
Affichage de 800*600 pixels et une souris pour lutilisation des outils graphiques
Un lecteur CDRom pour linstallation depuis un CDRom
Systme dexploitation : Windows NT (avec service pack 5 ou plus) ou 2000 (XP inclus).
Notez que la version Entreprise ne peut sinstaller que sur les versions Server de ces systmes
dexploitation. La version Desktop et la version personnelle peuvent sinstaller galement
sous Windows Me ou 98. Les outils clients et les options de connectivit peuvent quant eux
tre installs sur tous les Windows depuis Windows 95.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

2.1.2.

6 / 67

Etape n1 : Menu CDRom SQL Server

Voici le menu apparaissant aprs insr le CDRom SQL Server Developer Edition :

Si ce menu napparat pas lors de linsertion de votre CDRom ou si vous lancez linstallation depuis
un lecteur rseau ou une autre source, vous pouvez lancez manuellement linstallation en excutant le
fichier autorun.exe ou setup.bat pour sauter ltape 1.
Observons maintenant ce menu. Voici maintenant les 5 options proposes :
Composants de SQL Server 2000
o Cest loption pour installer le serveur SQL en lui-mme et/ou les composants et
outils additionnels.
Composants requis pour SQL Server 2000
o Si vous tes sous Windows 95, vous pouvez mettre niveau votre systme
dexploitation pour supporter les outils clients de SQL Server.
Aide sur linstallation et la mise niveau
o Ouvre le fichier daide de SQL Server dans laquelle vous trouverez entre autre les
dtails de linstallation du serveur.
Consulter les notes de mise jour
o Corrections apportes au manuel qui nont pas pu tre incluses dans le fichier daide
original
Visitez notre site Web

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
o

7 / 67

Renvoie
lutilisateur
sur
le
site
web
de
SQL
Server :
http://www.microsoft.com/france/sql/default.asp si vous installez la version franaise
de SQL Server.

Loption qui nous intresse est la premire : Composants de SQL Server 2000.

2.1.3.

Etape n2 : Choix du programme installer

Vous devriez arriver dans ce menu :

Vous devez ici choisir quel composant installer.


Vous pouvez installer :
Le serveur :
o Cest le serveur SQL en lui-mme et/ou ses outils clients et ses fichiers de
connectivit.
Analysis Services :
o Cest un outil permettant danalyser les donnes du serveur et de modliser des
dataware house
English Query :
o Cet outil vous permet de formuler vos requtes en anglais.
Installons le serveur. Vous pourrez relancer le menu du CDRom plus tard pour installer les deux outils
supplmentaires.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

2.1.4.

8 / 67

Etape n3 : Options dinstallations

Cliquez sur suivant sur la premire page. Vous arrivez alors cet cran :

Cet cran vous permet de choisir entre :


Installer le serveur SQL sur la machine locale, cest cette option que nous choisirons
Installer le serveur SQL sur une machine distante, ce qui permet dinstaller le serveur SQL sur
une autre machine. La procdure est un peu trop complexe expliquer et sort du cadre de cet
article. Reportez vous laide fournie pour plus de dtails.
Installer un serveur SQL virtuel, permet dinstaller, si lordinateur fait partie dun cluster (et
donc que MSCS - Microsoft Cluster Service est install)
Gardons la premire option. Vous devez maintenant choisir une installation :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

9 / 67

Ce menu vous propose trois choix :


Crer une nouvelle instance de SQL Serveur ou installer des outils clients
o Cest le choix que nous allons faire. Cette option va nous permettre dinstaller le
serveur SQL, ou le outils clients.
Mettre niveau supprimer ou ajouter des composants sur une instance existante de SQL
Server
o Si une instance de SQL Server est dj installe sur la machine, vous pourrez modifier
son installation. Nous verrons plus loin ce quest une instance SQL
Options avances
o Permet daccder aux options avances. Ces options sortent du cadre de ce cours,
mais voici brivement leurs rles :
Enregistrer un fichier .ISS sans surveillance : permet de crer un fichier
de rponse pour automatiser une installation. Cette option est utile pour par
exemple crer des installations du MSDE (SQL Server Desktop Engine) et
ainsi de redistribuer ce dernier sans avoir besoin de demander lutilisateur
de savoir configurer un serveur SQL.
Reconstruire le registre : permet de reproduire linstallation juste en
recrant une ruche dinstance. Une ruche dinstance est une clef racine
dans la base de registre dans laquelle les options de SQL Server sont
sauvegardes. Chaque instance a sa propre ruche.
Grer un serveur virtuel pour la mise en clusters avec basculement :
Permet de procder des modifications sur des clusters existants, comme
modifier le nom ou bien ajouter ou supprimer des nuds de clusters.
Comme toujours, choisissons loption par dfaut. Aprs avoir valid, entrez votre nom et le nom de la
socit pour laquelle vous travaillez puis acceptez le CLUF (Contrat de Licence de lUtilisateur Final)
aprs lavoir lu.

2.1.5.

Etape n4 : Choix des composants

Vous devriez arriver sur cet cran :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

10 / 67

Trois options soffrent alors vous :


Outils clients uniquement :
o Choisissez cette option si vous ne voulez que les outils clients et pas le serveur
SQL. Utilisez par exemple cette option si vous disposez dun serveur SQL centralis
pour ninstaller que les outils permettant dy accder.
Server et Outils clients :
o En plus dinstaller les outils clients, on installe par le biais de cette option le serveur
SQL.
Connectivit uniquement :
o Ninstalle que des composants et des bibliothques daccs.
Choisissons dinstaller le serveur SQL et les outils clients en cochant la deuxime option.
Il faut maintenant choisir une instance installer :

SQL Server permet davoir sur la mme machine plusieurs instances . Cela signifie que sur une
machine quelconque vous pouvez avoir deux ou plus serveurs SQL en simultan. Chacun deux ayant
alors ses propres bases de donnes, et sa propre ruche (une ruche est une clef racine de la base de
registre dans laquelle sont stockes toutes les options du serveur SQL). Les instances sont
diffrencies par un nom attribu chacune delle. Il est toutefois rare davoir besoin dinstaller
plusieurs instances sur une mme machine.
Linstance par dfaut est linstance recherche sur la machine lorsque aucune instance nest spcifie.
Si vous installez SQL Server sur une machine sur laquelle il nest pas install et si vous ne prvoyez
pas dinstaller dautres instances sur la machine, gardez loption Par dfaut coche. Il sera alors
plus simple daccder cette base depuis les autres programmes.
Si vous installez une nouvelle instance sur la machine, spcifiez alors un autre nom pour linstance.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

11 / 67

Supposons que cest linstance par dfaut que nous installons et cliquons sur suivant .

2.1.6.

Etape n5 : Choix du type dinstallation

Vous arrivez en principe sur ce menu :

Vous devez alors choisir le type dinstallation


Type : Par dfaut , Minimum ou Personnalis .
o Loption Par dfaut convient pour la plupart des utilisateurs et comprend les outils
clients et le serveur SQL. Utilise environ 250 Mo despace disque (hors donnes de
vos bases de donnes)
o Loption Minimum nest slectionner que si vous manquez vraiment despace
disque. Utilise environ 120 Mo despace disque.
o Loption Personnalis est utile si vous souhaitez installer des composants
spcifiques qui ne figurent pas dans loption par dfaut ou si vous ne souhaitez
installer uniquement ce qui vous semble ncessaire.
Dossiers de destination
o Le programme dinstallation vous demande de choisir un dossier contenant les
fichiers programmes et un autre contenant les fichiers de donnes. Ce dernier
rpertoire va contenir vos futures bases de donnes (vous pourrez toutefois choisir
spcifiquement pour chaque base de donne un emplacement particulier) et il est
recommand de choisir un autre lecteur pour ce dossier. Il sera alors plus facile dun
point de vue administratif de grer le serveur. De plus, si le dossier est situ
physiquement sur un autre disque les performances peuvent tre accrues en
distinguant le disque de donnes du disque dapplication.
Espace disque utilis
o Le programme rcapitule lutilisation disque que le serveur va prendre (hors fichiers
de bases de donnes)

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

12 / 67

Linstallation par dfaut convient pour la plupart dentre nous. Vous pouvez slectionner
Personnalis et voir les diffrents composants pouvant tre installs. Je ne les dcrirai pas ici,
reportez vous laide pour plus de dtails.
Cliquez sur suivant.

2.1.7.

Etape n 6 : Choix du compte de service

Si vous avez choisi dinstaller le serveur avec les options par dfaut vous devriez arriver lcran
suivant (vous aurez dabord choisi les options dinstallation si vous avez cliqu sur Personnalis ) :

Vous devez spcifiez le compte utilis pour faire fonctionner le serveur SQL.
Choisissez tout dabord si vous utiliserez les mmes informations pour chaque service ou si
vous spcifierez sparment ces informations. A de rare exceptions prs, vous pouvez utilisez
le mme compte pour tous les services.
Choisissez alors un compte dexcution de service. Le serveur SQL utilisera alors le compte
spcifi pour sexcuter. Il requit donc des droits administrateurs sur la machine, et mme les
droits dadministrateur du domaine si vous utilisez un cluster de serveurs.
o Utiliser le compte systme local , cette option est intressante si vous nutilisez
quun seul serveur SQL, ou si vous lutilisez des fins de tests. En effet, le compte
systme local na pas accs aux fonctionnalits rseaux de Windows 2000 et ne
pourra donc pas communiquer avec dventuels autres serveurs SQL.
o Utiliser un compte dutilisateur de domaine , spcifiez ici un utilisateur ayant les
droits dadministrateur (ou administrateur du domaine si vous utilisez un cluster). Il
peut tre intressant de crer un utilisateur spcifique ayant des droits limits (comme
refuser louverture de session par exemple) afin de pouvoir isoler le compte SQL et
dtecter plus facilement la source dun ventuel piratage. Vous pouvez spcifier soit
un utilisateur local, soit un utilisateur du domaine si vous souhaitez utiliser le mme
compte pour tous vos serveurs. Dans tous les cas, il faut que vous spcifiiez le mot de
passe du compte.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

13 / 67

Loption dmarrage automatique du service nest disponible que si vous avez choisi de
configurer sparment chaque service. Vous pourrez toujours modifier les options du serveur
aprs linstallation pour changer ce paramtre.
o Cochez la case pour que le service ce lance automatiquement lors du dmarrage de la
machine.

Validez en cliquant sur suivant.

2.1.8.

Etape n7 : Mode dauthentification

Il faut maintenant configurer lauthentification du serveur via cet cran :

SQL Serveur propose deux modes dauthentification :


Mode dauthentification de Windows
o Ce mode dauthentification est trs utile, surtout en entreprise. En effet, SQL Serveur
utilise Windows pour authentifier les utilisateurs. Il fait ainsi appel un contrleur de
domaine ou la machine locale, et donc gre la scurit de faon transparente et sre.
Par exemple, un utilisateur quelconque faisant parti du domaine se connectant la
base de donnes via un outil de gestion naura pas rentrer le mot de passe. En effet
le systme aura identifi et authentifi lutilisateur. Lauthentification est sre dans la
mesure o tout se fait par Windows et est donc crypte par le systme dexploitation.
Le revers de la mdaille est quil faut obligatoirement avoir ouvert une session sur le
domaine pour avoir le droit daccder au serveur. Il ya galement un avantage
administratif, puisquil suffit de choisir quels comptes du domaine ont accs au
serveur.
o Tous les administrateurs locaux sont donc administrateurs du serveur SQL (les
administrateurs du domaine tant souvent inclus dans ce groupe local, ils le sont aussi
en consquence).
Mode mixte (authentification Windows et authentification SQL Server)
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
o

14 / 67

Ce mode permet galement de sauthentifier par le systme dexploitation, mais aussi


en spcifiant un nom dutilisateur et un mot de passe spcifique SQL Server. Ces
comptes ne peuvent tre utiliss que depuis SQL Server et sont moins srs, moins de
crypter le canal de transmission. Lavantage de ce mode est de pouvoir accder depuis
nimporte quel ordinateur au serveur, en ayant un nom dutilisateur et un mot de
passe.
Le compte sa et un compte spcial. Il est un compte non Windows ayant
totalement accs au serveur SQL (System Administrator). Il convient donc de lui
donner un mot de passe long et difficile trouver car cest une faille potentielle de
scurit. Evitez absolument les mots de passe vide, sauf si vous utilisez le serveur
des fins de tests.

Nous choisissons de prfrence le mode dauthentification de Windows qui est beaucoup plus
simple administrer et plus scuris, moins davoir effectivement besoin du mode mixte.
Choisissez le mode qui vous semble le plus judicieux puis cliquez sur suivant.

2.1.9.

Etape n8 : Fin dinstallation

Le programme dinstallation copie alors les fichiers.


Le serveur est alors install. Il est possible que lon vous demande de relancer lordinateur pour finir
linstallation si des fichiers du systme dexploitation ont t mis jour.
Pensez galement mettre jour le serveur via de services packs disponibles sur le site de Microsoft :
http://www.microsoft.com/france/sql. A ce jour, deux services pack sont disponibles. Linstallation de
ces services pack est indispensable pour un serveur de production. Pour un serveur de dveloppement
(donc de tests), cest un plus, mais ce nest pas obligatoire.
Consulter le chapitre 4.1 pour des dtails de fin dinstallation.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

15 / 67

3. Prsentation des outils dentreprise


3.1.

Service Manager

Si vous avez install Service Manager (inclus dans les options dinstallation par dfaut), une nouvelle
icne sera apparue dans la barre des taches :

Cest licne de Service Manager.


Vous pouvez lancer Service Manager depuis le menu dmarrer (chemin par dfaut) :
Menu dmarrer -> Programmes -> Microsoft SQL Server -> Service Manager
En lanant Service Manager depuis le menu dmarrer ou en double cliquant sur licne de
notification, vous lancerez loutil de gestion des services :

Le gestionnaire des services permet de configurer le dmarrage des services.


Vous pouvez spcifier :
Le serveur : entrez le nom de la machine grer (vous devez bien sr tre administrateur du
serveur en question)
Le service grer : gnralement trois services sont installs avec SQL Serveur :
o SQL Serveur : cest le moteur SQL, le service principal. Les autres services sont
dpendants de ce dernier donc si vous dsactivez ce service, vous dsactiverez les
autres.
o SQL Server Agent : cest un service permettant lautomatisation des tches courantes
tels que la sauvegarde rgulire, la publication dune base de donne dans le cadre de
rplication, etc. Ce service nest pas ncessaire pour lexcution du serveur SQL mais
offre une panoplie doutils administratifs apprciables.
o Distributed Transaction Coordinator : cest un service permettant de grer les
transactions distribues.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

3.2.

16 / 67

Enterprise Manager

Enterprise Manager est le couteau suisse de ladministrateur et du dveloppeur SQL Server. En effet,
depuis cet outil vous pouvez accder toutes les options et fonctionnalit du serveur et de toutes les
bases ( condition den avoir le droit bien sr !). Il se prsente sous la forme dune console enfichable
MMC dont voici un aperu :

Comme vous pouvez le constater sur cette image, Enterprise Manager vous permet de manipuler
depuis la mme fentre plusieurs serveurs en mme temps. Ces serveurs peuvent tre regroups en
groupes ou sous groupes pour faciliter la gestion dimportants parcs de machines. Les fonctionnalits
sont regroupes par nud dans un sous-arbre unique chaque instance de serveur :
Bases de donnes : permet daccder aux bases de donnes, et leur contenu
Data Transformation Services : service de transfert et de transformation des donnes
Gestion : utilitaire pour la gestion courante et la surveillance
Rplication : permet de lier les serveurs entre eux pour rpliquer les donnes, en tant que
distributeur ou en tant quabonn
Scurit : gestion des accs au serveur
Services Support : gestion des transactions distribues et configuration de lenvoi de mails
depuis SQL Server
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

17 / 67

Meta Data Services : Permet dutiliser un serveur de mta-donnes.

3.2.1.

Ajouter un serveur Enterprise Manager

Pour ajouter un serveur administrer, rien de plus simple. Cliquez droit sur le groupe de serveur dans
lequel vous voulez rajouter le serveur et faites Enregister un nouveau serveur . Vous pouvez
galement crer un nouveau groupe de serveurs en cliquant droit sur Serveurs Microsoft SQL ou
sur un groupe dj existant si vous souhaitez mettre le nouveau groupe dans un groupe existant.
Enregistrement dun nouveau serveur :
La premire page rsume les diffrentes actions que vous devrez effectuer. On vous propose ensuite la
liste des serveurs trouvs sur le rseau :

Choisissez ici le(s) les serveur(s) rajouter, puis cliquez sur Ajouter pour les mettre dans la liste
des serveurs ajouter. Cliquez sur suivant.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

18 / 67

Spcifiez ici si vous utiliserez votre compte Windows ou un compte SQL. Utilisez la premire option
de prfrence, car vous naurez aucune information de login fournir. Vous devez toutefois tre sur le
mme domaine que le serveur (ou en local) pour bnficier de cette option.
Si vous choisissez la deuxime option, il faudra spcifier un compte utilisateur SQL ayant le droit de
se connecter, ou de demander chaque connexion un login et un mot de passe :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

19 / 67

Dans tous les cas de figure, on vous demande dans quel groupe mettre ce serveur, soit un existant, soit
on vous propose den crer un nouveau.
Aprs validation, une fentre vous indiquera le succs ou lchec de lenregistrement du serveur.

3.2.2.

Configurer le serveur

Pour accder aux options de configuration du serveur, faites un clic droit sur le nom du serveur puis
choisissez options. Remarquez au passage le menu conceptuel du serveur dans lequel vous avez accs
certaines tches courantes comme larrt/dmarrage du service, limport/export de donnes, etc.
Les options se prsentent sous la forme dune fentre plusieurs onglets :

Reportez vous la partie Options de configuration du serveur du chapitre Tches administratives


courantes pour plus de dtails.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

3.2.3.

20 / 67

Crer une base de donne

Pour crer un base de donne, il suffit de cliquer droit sur le nud Bases de donnes et de choisir
Nouvelle base de donne .

Vous devez alors spcifier un nom de base de donne, ici Base de test , un nom de classement
(langue de la base de donne, la valeur par dfaut tant celle du serveur) et les fichiers de donne et de
transactions, ainsi que leurs proprits :
Fichier(s) de donnes :

Fichier(s) de transactions :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

21 / 67

Pour les deux types de fichier, vous pouvez spcifier le comportement de lexpansion des fichiers.
Vous pouvez en effet dfinir de quelle faon les fichiers de donnes vont augmenter de taille (pas pas
ou en pourcentage), une taille maximale et les fichiers dans lesquels les donnes vont tre rparties.
Plus de dtails dans laide fournie avec SQL Server.

3.2.4.

Crer ou modifier une table

Pour crer une table, cliquez droit sur le nud tables de la base de donnes sur laquelle vous
voulez crer la table.
Pour modifier une table existante, cliquez droit sur la table existante et fates Modifier la table .
Dans les deux cas, vous devez arriver un cran comme celui-ci :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

22 / 67

Depuis cette fentre, vous pouvez spcifier crer/modifier/supprimer une colonne la table, en
spcifiant le type de donne, la longueur, le droit dy mettre NULL, etc.
Vous avez galement un certain nombre dicnes pour grer les clefs, les index, les triggers, etc.
Pour appliquer les modifications ou enregistrer la nouvelle table, cliquez sur la disquette et la table
sera enregistre. Si vous modifiez une table existante, il vaut veiller lintgrit des donnes et il se
peut que vous ne soyez pas autoris modifier la table si des donnes existent dj.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

3.2.5.

23 / 67

Modliser la base de donnes.

Enterprise Manager propose un diteur de diagramme dans lequel vous pouvez afficher les tables et
leurs relations. Depuis ce diagramme, vous pouvez modifier le modle de donne directement :

Toutefois, je recommande plutt lutilisation de Visio pour les personnes ayant ce logiciel. En effet
Visio permet de modliser les bases de donnes dun point de vue dtach du serveur, et possde de
nombreux outils tels que la gnration de rapports que SQL Server ne propose pas.

3.2.6.

Construction visuelle de vues

Enterprise Manager permet galement de construire visuellement des vues.


Pour crer une nouvelle vue, cliquez sur le nud Vues et choisissez Nouvelle vue . Pour
modifier une vue existante, cliquez droit sur la vue en question et faites Modifiez la vue .

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

24 / 67

Vous pouvez trs facilement crer des vues depuis cet cran en spcifiant les tables utiliser, les
champs afficher et les relations entre les tables.

3.2.7.

Editeur de procdures stockes

Le dveloppement de procdure stocke est facilit par Enterprise Manager. Vous pouvez soit crer
une procdure stocke, soit en modifier une existante depuis le nud Procdures stockes :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

25 / 67

Nous parlerons des procdures stockes dans la prsentation du Transact SQL

3.2.8.

Conclusion

Enterprise Manager est le plus complet des outils permettant dadministrer SQL Serveur. Vous pouvez
galement visualiser/modifier/supprimer des donnes, mais il est souvent plus intressant de passer
par une application pour cela. Pour les environnements o vous navez pas Enterprise Manager,
sachez que toutes les commandes sont disponibles en T-SQL pour configurer et administrer le serveur.

3.3.

Analyseur de requtes

Lanalyseur de requtes est un client SQL Server destin lexcution de requtes. De plus, il vous
permet dafficher le plan dexcution, dafficher des informations de traage et dafficher des
statistiques. Vous pouvez ainsi optimiser les requtes en identifiant les goulots dtranglement.
Tout comme Enterprise Manager, vous pouvez soit spcifier un compte SQL, soit utiliser le compte
Windows.
Ouverture de lanalyseur de requte :

Depuis cette fentre vous devez spcifier des informations de connexion valides, quelles soient du
type authentification Windows (cest donc lutilisateur en cours sur la machine qui va transmettre sont
authentification) ou du type SQL Server (des comptes spcifiques SQL). Un bouton parcourir vous
montrera la liste des serveurs disponibles sur le rseau, le . tant le serveur local. Attention
toutefois, un administrateur peut cacher pour des raisons de scurit la dcouverte de son serveur par
ce biais.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

26 / 67

Une fois connect, vous avez votre disposition une fentre dans laquelle vous pourrez entrez vos
requtes :

Cet outil tant MDI (Multiple Documents Interface Interface documents multiples), vous pouvez
ouvrir plusieurs de ces fentres depuis le menu fichier. Nouveau pour ouvrir une nouvelle fentre
utilisant la mme connexion, Connecter pour ouvrir une nouvelle connexion.
Remarquez le volet gauche qui vous permet dexplorer le serveur, avec, en premier les bases de
donnes, puis les objets communs (fonctions, types de donnes, etc.) et des modles dans un second
onglet du volet qui vous aidera la rdaction de requtes courantes.
Notez galement le menu droulant de la barre doutil dans lequel il est affich la base de donne en
cours pour la fentre ayant le focus.
Entrez donc une requte quelconque dans la fentre et cliquez soit sur la flche bleu de la barre
doutils, soit appuyez sur F5 pour excuter la requte.
La requte que jemploie ici est :
SELECT * FROM Products

Vous pouvez afficher les rsultats de deux manires. Cliquez sur le bouton droulant pour choisir entre
le mode texte ou le mode grille, ou encore dans un fichier :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

27 / 67

Le plan dexcution vous permet dafficher quelles parties des requtes sont les plus lourdes.
Slectionnez de lafficher depuis ce mme menu et excutez la requte.
Un nouvel onglet sera apparu :

Vous pouvez depuis cet onglet afficher le cot de chaque tape de la requte. Ici, il ny a qune tape
donc lintrt est limit, mais pour les requtes importantes, cela permet disoler les charges lourdes.
De plus, depuis lanalyseur de requtes, vous pouvez grer les index de la table en cours depuis le
menu Fichier -> Grer les index .

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

28 / 67

4. Tches administratives courantes


4.1.

Tches de post-installations

4.1.1.

Lancement du serveur

Si vous venez dinstaller le serveur SQL et que vous navez pas redmarr, il faudra lancer
manuellement le serveur. Si vous avez redmarr et moins que vous ayez spcifi le contraire lors de
linstallation, le serveur sera lanc.
Si ce nest pas le cas, vous avez plusieurs possibilits pour lancer le serveur :
Utilisez le Gestionnaire de service (Service Manager). Pour plus de dtails, rfrez vous au
chapitre 3.1 concernant Service Manager.
Utilisez le composant enfichable Services depuis une console MMC et dmarrez le service
MSSQLSERVER

Utilisez Enterprise Manager (qui est en fait galement un composant enfichable dans une
console MMC). Enterprise Manager est loutil idal pour ladministrateur du serveur SQL. Je
prsente plus en dtail loutil au chapitre 3.2.

4.1.2.

Configurations diverses

Utilisez Enterprise Manger pour configurer les options de votre serveur. Vous pouvez galement
utiliser des commandes Transact SQL pour modifier la plupart des options. Il est toutefois plus ais
dutiliser Enterprise Manager. Reportez vous la documentation si vous souhaitez tout de mme
utiliser le Transact SQL.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

29 / 67

Lancez Enterprise Manager. Selon que vous souhaitiez administrer un serveur install localement ou
un serveur install sur une autre machine, vous devrez ou non enregistrer un serveur. Reportez vous la
prsentation de Enterprise manager pour plus de dtails.
4.1.2.1.

SQL Server install localement

Si vous avez install localement SQL Server, vous aurez votre instance du serveur dj enregistre.
Vous pouvez donc cliquer avec le bouton droit sur linstance et slectionner proprits pour
accder aux options du serveur.
4.1.2.2.

SQL Server install sur une autre machine

Si vous avez install SQL Serveur sur une autre machine, vous devrez renseigner le serveur. Pour se
faire cliquez droit sur Groupe SQL Server et faite Enregistrez un nouveau serveur SQL . Suivez
alors les indications de lassistant. Pour plus dinformation, reportez vous la prsentation de
Enterprise Manager.
Une fois le serveur enregistr, vous pouvez cliquer avec le bouton droit sur linstance et slectionner
proprits pour accder aux options du serveur.
4.1.2.3.

Options de configuration du serveur

Les diffrentes options de configuration du serveur apparaissent sous forme donglets :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

30 / 67

Les diffrents onglets regroupent les options par catgories. Pour des dtails spcifiques chaque
options, reportez vous la documentation, mais voici un bref descriptif de chaque onglets :
Gnral :
o Cet onglet vous donne des informations systmes propos du serveur SQL.
o Vous pouvez galement configurer les paramtres de dmarrage des services ainsi que
la ligne de commande de dmarrage, ainsi que les diffrents moyens de connexion au
serveur.
Mmoire :
o Vous pouvez configurer ici loccupation mmoire du serveur.
o Par exemple, vous pouvez allouer une certaine quantit de mmoire vive rserve au
serveur, et indiquer des paramtres spcifiques de gestion mmoire pour optimiser les
performances du serveur (au dtriment des autres applications souvent)
Processeur :
o Pour les ordinateurs ayant plusieurs processeurs, vous pouvez ddier au serveur SQL
un ou plusieurs processeurs, et configurer diverses options de priorit du serveur
SQL.
Scurit :
o Prcisez dans cet onglet le mode dauthentification et le compte de service de SQL
Server.
Connexions :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

31 / 67

o Cet onglet permet de configurer les connections au serveur.


Paramtres du serveur :
o Prcisez depuis cet onglet la langue par dfaut du serveur, certains paramtres de
scurit ainsi que lutilisation de mails depuis le serveur.
Paramtre de base de donnes :
o Cest ici que vous spcifiez des options de maintenance et dadministration, telles que
les rpertoires de cration de base de donne, des options de sauvegarde, etc.
Rplication :
o Configurer ici si le serveur est capable de rpliquer une base de donnes.
Active Directory :
o Vous pouvez enregistrer votre serveur dans une base Active Directory.

4.1.3.

Configurer la prise en charge de SQL XML dans IIS.

Comme nous lavons vu dans la prsentation de SQL Server, il est possible de rcuprer des donnes
directement au format XML depuis SQL Serveur. Pour cela, il faut que IIS soit install.
4.1.3.1.

Lancement de lassistant

Lancer lassistant depuis le menu dmarrer en ouvrant :


Menu dmarrer -> Microsoft SQL Server -> Configurer la prise en charge de SQL XML dans IIS
Une console MMC va alors souvrir avec le composant enfichable IIS Virtual Directory
Management for SQL Server

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

4.1.3.2.

32 / 67

Crer un rpertoire virtuel

Explorer larborescence jusquau site Web accueillant la gnration de flux XML depuis SQL Server.
Cliquez droit sur le site Web et faites Nouveau -> Rpertoire virtuel .

Vous devriez alors arriver lcran de configuration de ce rpertoire virtuel :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
4.1.3.3.

33 / 67

Onglet Gnral

Spcifiez le nom du rpertoire virtuel. Pour cet exemple, nous utiliserons la base de donne
Northwind qui est une base de donne exemple installe avec SQL Server.
Mettons alors, comme le suggre lassistant :
http://monserveur/Northwind o nomserveur est le nom de la machine.
Spcifier galement un chemin ou stocker ces fichiers. Faites attention aux droits des rpertoires.
Pour notre exemple, mettons D:\SQLXML\Northwind comme chemin des fichiers.
4.1.3.4.

Onglet Scurit

Spcifiez dans cet onglet des informations de connexion valides. Pour notre exemple, choisissons la
deuxime option utiliser lauthentification intgre de Windows . Vous aurez tout loisir daffiner
ses options lorsque vous utiliserez vos propres bases de donnes.
4.1.3.5.

Onglet Source de donnes

Cet onglet permet de choisir le serveur SQL. Si le serveur Web est situ sur une autre machine vous
pourrez alors choisir le bon serveur SQL.
Choisissez galement la bonne base de donnes. Pour notre exemple, choisissons Northwind.
4.1.3.6.

Onglet Paramtres

Spcifiez depuis cet onglet comment les utilisateurs peuvent accder au contenu. Pour lexemple,
cochez tout. Vous devrez ensuite spcifier uniquement les options dont vous aurez besoin pour viter
des commandes dangereuses.
4.1.3.7.

Onglet Noms virtuels

Configurez depuis cet onglet des schmas de requtes. Cette notion tant assez complexe, je vous
conseille dtudier la documentation de SQL Server avant de configurer cet onglet.
Pour lexemple, cliquez sur Nouveau . Dans la boite dialogue alors ouverte, choisissez un nom
virtuel. Prenons templates (ou ce que vous voulez) pour lexemple. Slectionnez template
comme type de nom virtuel et choisissez le chemin daccs : D:\SQLXML\Northwind\templates
(qui doit exister !!!).
Procdez de mme pour crer un nom virtuel pour les schmas : cliquez sur Nouveau , puis mettez
schemas (ou ce que vous voulez) dans le nom virtuel, schema pour le type et
D:\SQLXML\Northwind\schemas pour le chemin daccs, qui, bien sr, doit exister.
Enfin, cliquez nouveau sur Nouveau puis mettez dbobjects dans le nom virtuel (ou ce que
vous voulez) et en type choisissez dbobject . Vous navez pas besoin ici de spcifier un chemin.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
4.1.3.8.

34 / 67

Onglet Avanc

Cet onglet contient dautres paramtres spcifiques que nous laissons tels quels.

4.1.4.

Accder aux donnes

Pour tester le rpertoire virtuel cre, tapez la chane suivante dans le navigateur :
http://monserveur/northwind?sql=SELECT * FROM Employees FOR XML AUTO&root=root et
appuyez sur ENTRE.
Si vous ne voyez rien, affichez la source de la page. Vous verrez alors le rsultat des donnes au
format XML.
Reportez vous la documentation pour personnaliser le flux XML de sortie. Il suffit alors prs depuis
nimporte quelle application capable de rcuprer des donnes au format XML pour aprs les traiter.

4.1.5.

Utilisation dun modle (template)

Il est beaucoup plus intressant dutiliser un template que de spcifier la requte directement dans
lurl.
Crez ce fichier XML dans votre rpertoire templates (d:\SQLXML\Northwind\templates) :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
<sql:query>
SELECT * from [Products by Category] FOR XML AUTO
</sql:query>
</ROOT>

Enregistrez le sous le nom : products.xml .


On dclare ici un modle (ou template) SQL. Ce premier exemple consiste excuter une requte
simple pour afficher tous les lments dune vue appele Product by catgory . Notez bien le FOR
XML AUTO qui permet de gnrer le flux au format XML.
Notez galement que tout le modle est inclut dans un lment ROOT, mais vous pouvez lappeler
comme vous le souhaitez, ROOT tant juste plus explicite.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

35 / 67

Ouvrez ensuite lurl : http://nomserveur/northwind/templates/products.xml pour voir le rsultat :

Comme vous pouvez le voir, vous avez rcupr le rsultat sous forme XML. Vous pouvez dj
imaginer lavantage dune telle technique. Par exemple, on utilisant le support de XML, nimporte
quelle application capable deffectuer une requte http de rcuprer des donnes. Pas besoin de crer
une connexion avec le serveur SQL ! De plus, XML tant standard, on pourra accder ces donnes
depuis nimporte quelle plateforme possdant un parseur XML.

4.1.6.

Encore plus fort, lutilisation de feuilles de style

Le flux tant au format XML, rien ne nous empche dy associer une feuille de style.
La preuve par lexemple :
Utilisons cette fois ci ce template :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl='products.xsl'>
<sql:query>
SELECT ProductID, ProductName, CategoryID FROM Products FOR XML AUTO
</sql:query>
</ROOT>

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

36 / 67

Puis copiez cette feuille de style dans le mme rpertoire en lappelant products.xsl :
<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match='Products'>
<tr>
<td>
<xsl:value-of select='@ProductID' />
</td>
<td>
<xsl:value-of select='@ProductName' />
</td>
<td>
<xsl:value-of select='@CategoryID' />
</td>
</tr>
</xsl:template>
<xsl:template match='/'>
<html>
<body>
<table border='1'>
<tr>
<th colspan='3'>SQLXML test avec
XSL</th>
</tr>
<tr>
<th>ID du produit</th>
<th>Nom du produit</th>
<th>ID de la catgorie du produit</th>
</tr>
<xsl:apply-templates select='ROOT' />
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Et observez le rsultat en ouvrant lurl suivante :


http://monserveur/northwind/templates/products.xml?contenttype=text/xml.
Noubliez pas de prfixer les colonnes par @ car le flux gnr les transforme en attributs.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

37 / 67

Vous devriez arriver un rsultat comme celui-ci :

Vous pouvez voir alors que la feuille de style a transform le flux XML en HTML. Le ?
contenttype=text/html indique au navigateur que le rsultat est au format HTML, et non XML
comme lextension le laisse supposer.
Les possibilits de SQL XML sont immenses, on peut passer des paramtres par lurl, utiliser XPath
pour parcourir un document et mme y mettre des scripts clients. Il est donc possible de raliser des
applications Web compltes sans avoir une seule ligne de code standard (C#, VB, PHP ou autre)
taper.
Pour aller plus loin, je vous invite consulter la documentation fournie avec SQL Server.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

38 / 67

5. Introduction au Transact SQL


5.1.

Quest ce que le T-SQL (Transact SQL)

Le Transact SQL, ou T-SQL est un langage ddi laccs aux donnes. Il est une extension de SQL et
propose de nombreuses amliorations, compar ce dernier :
Structures de contrle (if/then/switch/)
Dclaration de variables
Curseurs (pointeurs de donnes)
Et bien dautres encore
Ce langage est une extension de la norme SQL-92.

5.2.

Northwind

Pour les exemples qui vont suivre, jutiliserai lanalyseur de requtes, mais vous pouvez trs bien
utiliser nimporte quel logiciel permettant lexcution de requtes. Nous utiliserons la base de donne
Northwind qui est livr en exemple avec SQL Server. Voici les tables de cette base :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
Ainsi que quelques vues qui ont t dfinies :

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

39 / 67

SQL Server

5.3.

40 / 67

Commentaires

Il existe deux faons de mettre des commentaires dans une requte T - SQL :
-- Commentaire

Permet de mettre en commentaire tout ce qui suit sur la mme ligne.


/* Commentaire */

Permet de mettre en commentaire tout ce qui est inclut entre les /* */


Exemple :
/*
*/

Exemple de commentaire

-- Ceci est un commentaire d'une ligne


DECLARE @ProductCount int
/* On met un commentaire
sur plusieurs
lignes */
SET @ProductCount = (SELECT COUNT(ProductID)
FROM Products)
SELECT @ProductCount -- On met un commentaire la fin de la ligne

Nous verrons plus loin quoi correspondent les diffrentes instructions, cet exemple permettant juste
de montrer la syntaxe des commentaires.

5.4.

Variables

5.4.1.

Dclaration

Sans les variables, le T-SQL ne serait quune implmentation du SQL standard. Vous pouvez dclarer
des variables de nimporte quel type SQL Server.
Exemple :
DECLARE @MyInteger int

Que signifie cette ligne ?


Simplement, nous avons dclar une variable locale du nom de @MyInteger et de type int. On dit
quune variable est locale (marque par le @ ) car seule cette requte pourra accder cette
dernire.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.4.2.

41 / 67

Types de donnes

Il existe un certain nombre de types de donnes pour le T-SQL :

Types numriques exacts (c'est--dire sans perte dinformation) :


o entiers :
bigint : entier 64 bits sign
int : entier 32 bits sign
smallint : entier 16 bits sign
tinyint : entier 8 bits non sign (quivalent un octet)
o binaire :
bit : 0 ou 1 (attention, ce nest pas true/false, mais bien les entiers 0 et 1)
o dcimaux et numriques :
decimal : nombre prcision fixe
numeric : quivalent au type decimal
o montaires :
money : reprsente une somme (4 chiffres aprs la virgule)
smallmoney : quivalent de money avec une prcision moindre
Types approchs (il peut rsulter une perte de donnes du limprcision de ces types)
o numriques approchs:
float : nombre virgule flottante
real : nombre virgule flottante de grande prcision
o date :
datetime : date et heure allant du 1er janvier 1753 au 31 dcembre 9999 avec
une prcision de 3.33 millisecondes.
smalldatetime : date et heure allant du 1 er janvier 1900 au 6 juin 2079 avec
une prcision dune minute.
o chanes de caractres :
char : chane de caractre fixe (8000 caractres maximum)
varchar : chane de caractre longueur variable (8000 caractres maximum)
text : chane de caractre de taille pouvant aller jusqu 2^31 1 caractres.
o chanes de caractres incluant les caractres Unicode.:
nchar : chane de caractres fixe (8000 caractres maximum) incluant les
caractres Unicode.
nvarchar : chane de caractres longueur variable (8000 caractres
maximum) incluant les caractres Unicode.
ntext : chane de caractres de taille pouvant aller jusqu 2^31 1 caractres
incluant les caractres Unicode.
o chanes binaires :
binary : chane binaire de taille fixe (8000 octets maximum)
varbinary : chane binaire de taille variable (8000 octets maximum)
image : chane binaire dune taille pouvant aller jusqu 2^31 1 octets
o autres :
cursor : rfrence vers un curseur. Plus de dtails au chapitre sur les curseurs.
sql_variant : pouvant contenir tous les types, lexception de text, ntext,
image et sql_variant.
table : type utilis pour stocker des rsultats pour une utilisation ultrieure.
timestamp : nombre unique mis jour chaque mise jour dun
enregistrement.
uniqueidentifier : identifiant global unique de type GUID
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

42 / 67

Nous verrons plus tard que nous pouvons crer nos propres types de donne.
A quoi sert le n devant les types de chanes de caractres ? Il correspond en fait aux types utilisant
les caractres Unicode. Ces types permettent dutiliser les caractres spciaux lis aux langues (les
accents, etc.). On peut toutefois utiliser des caractres spciaux, si on est sur le mme jeu de caractre
que le serveur, mais il est peu recommand de partir du principe que le serveur le restera (mise jour,
changement de configuration, de logiciel, etc.). Utilisez donc les n-types lorsque vous risquez
davoir des caractres spciaux. Toutefois, les n-types utilisent deux fois plus de place (les
caractres tant cods sur 16 bits au lieu de 8 comme avec les caractres normaux ), il faut donc
bien tudier le modle de donnes avant de faire le choix.
Les types variables (varchar, nvarchar, varbinary) permettent de limiter le gaspillage de place en
ne stockant que les donnes effectives. Par exemple, dclarer un char(20) prendra systmatiquement
20 octets en mmoire, alors que dclarer un varchar(20) ne prendra que la taille relle de la valeur
spcifie.

5.4.3.

Utilisation des variables :

Pour pouvoir utiliser une variable, il faut dabords quelle ait t dclare.
Vous pourrez ensuite laffecter de deux manires, et rcuprer sa valeur trs simplement.
Excutez la requte ci-dessus, en vrifiant que vous tes bien sur la base de donnes Northwind .
DECLARE @AvgUnitPrice money
SELECT @AvgUnitPrice = AVG(UnitPrice)
FROM Products
SELECT @AvgUnitPrice

Sortie :
28.8663

Que font ces quelques lignes de code ?


Tout dabord, on dclare un variable @AvgUnitPrice de type money. On laffecte ensuite via la clause
SELECT, et on lui donne la valeur moyenne de la colonne UnitPrice.
Enfin, on affiche la variable grce au SELECT
Autre exemple :
DECLARE @ProductCount int
SET @ProductCount = (SELECT COUNT(ProductID)
FROM Products)
SELECT @ProductCount

Sortie :
77

La diffrence avec lexemple prcdent est que cette fois ci nous utilisons le mot SET au lieu de
SELECT pour affecter la variable. Il faut bien faire attention avec SET au type de donne et au

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

43 / 67

nombre de champs retourns qui doit tre un. A loppos, avec SELECT, il faut faire attention car si
on renvoie plusieurs lignes, la valeur affecte sera celle de la dernire ligne affecte.
On peut galement affecter plusieurs variables en une fois avec SELECT, tandis quavec SET on ne
peut pas :
DECLARE @AvgUnitPrice money
DECLARE @ProductCount int
SELECT

@AvgUnitPrice = AVG(UnitPrice),
@ProductCount = COUNT(ProductID)
FROM Products
SELECT @AvgUnitPrice, @ProductCount

Sortie :
28.8663

77

Vous voyez ici comment affecter deux variables avec un seul SELECT, ainsi que comment en afficher
plusieurs, toujours avec SELECT.

5.4.4.

Types de donnes utilisateur

Vous pouvez crer vos propres types de donnes. Par exemple, pour reprsenter un code postal, on
utilise couramment varchar(5) comme type de donne.
Nous allons donc crer un type de donne ZipCode pour mapper ce type.
EXEC sp_addtype @typename='ZipCode', @phystype='varchar(5)'

Il faut indiquer le nom du nouveau type et le type physique des donnes.


Il est alors trs facile dutiliser le nouveau type :
DECLARE @cp ZipCode
SET @cp ='75010'
SELECT @cp

Il faut utiliser les types de donnes utilisateur avec prcaution, car si lon modifie le type, toutes les
donnes de toutes les tables de ce type risquent de ne pas pouvoir tre converties.

5.5.

IF / ELSE

Avec T-SQL vous pouvez crire des routines de test avec IF et ELSE
Exemple :
DECLARE @ProductCount int
SET @ProductCount = (SELECT COUNT(ProductID) FROM Products)
IF (@ProductCount > 100)
PRINT 'Plus de 100 rfrences'
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

44 / 67

ELSE
PRINT 'Moins de 100 rfrences'

Sortie, mais attention, la commande PRINT transmet des messages. Si vous utilisez un logiciel qui va
afficher sous forme de grille les rsultats, vous ne verrez rien. Utilisez par exemple lanalyseur de
requte et affichez les rsultats sous forme de texte.
Moins de 100 rfrences

Le mot clef IF attend une expression boolenne. Vous pouvez utiliser les oprateurs de comparaison
courants (=, >, <, >=, <=, <>, != , !<, !>) et utiliser les combinaisons logiques (AND, ALL, ANY,
BETWEEN, EXISTS, IN, LIKE, NOT, OR, SOME). Voyez la MSDN pour plus de dtails concernant
les oprateurs.
Le bloc ELSE est optionnel, et vous pouvez imbriquer autant de IF que vous le souhaitez. Si lun des
blocs faits plus dune ligne, imbriquez les lignes dans un block BEGIN END. Exemple :
DECLARE @ProductCount int
SET @ProductCount = (SELECT COUNT(ProductID) FROM Products)
IF (@ProductCount
BEGIN
PRINT
PRINT
END
ELSE
BEGIN
PRINT
PRINT
END

> 100)
'Plus de 100 rfrences'
@ProductCount

'Moins de 100 rfrences'


@ProductCount

Il aura fallu mettre ici entre un BEGIN END les lignes, sinon il y aurait eu une erreur. Notez au
passage que lon peut afficher directement une variable avec PRINT, si la conversion en nvarchar est
possible.
Autre exemple :
DECLARE @ProductCount int
SET @ProductCount = (SELECT COUNT(ProductID) FROM Products)
IF (@ProductCount < 100)
BEGIN
PRINT 'Plus de 100 rfrences'
PRINT @ProductCount
DECLARE @MaxPrice money
SELECT @MaxPrice = MAX(UnitPrice)
FROM Products
PRINT 'Le prix maximum est de ' +
CONVERT(nvarchar(10),@MaxPrice) +
' '
ELSE

END

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

45 / 67

BEGIN
PRINT 'Moins de 100 rfrences'
PRINT @ProductCount
END

Sortie :
Plus de 100 rfrences
77
Le prix maximum est de 263.50

Cet exemple est un peu plus complexe que lexemple prcdent. Observez tout dabord que lon peut
dclarer une variable dans un bloc BEGIN END, et que cette variable ne sera disponible que dans le
bloc o elle a t dclare.
Observez galement que pour pouvoir afficher une variable, il faut parfois la convertir, en fonction de
sont type. Ici, le type money nest pas affichable directement, cest pourquoi il faut utiliser CONVERT
en spcifiant le type de sortie et lentre (variable ou colonne). On concatne ensuite les chanes avec
les + .

5.6.

WHILE

Vous pouvez utiliser la structure WHILE dans une requte T-SQL. Le principe est le mme que le
while du C, C++, C#, ou la plupart des autres langages, c'est--dire que tant que lexpression value
est vraie, on excute la boucle, sinon, on quitte le WHILE.
Exemple :
DECLARE @index int
SET @index = 0
WHILE @index < 10
BEGIN
PRINT 'Index=' + CONVERT(varchar(2),@index)
SET @index = @index + 1
END

Sortie :
Index=0
Index=1
Index=2
Index=3
Index=4
Index=5
Index=6
Index=7
Index=8
Index=9

Vous voyez donc que la boucle affiche le contenu de la variable, puis lincrmente. La boucle sera
ritre si lexpression value est vraie, ici, lindex devant tre infrieur 10.
Vous pouvez galement utiliser CONTINUE et BREAK pour influencer sur le comportement de la
boucle.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

46 / 67

Par exemple :
DECLARE @index int
SET @index = 0
WHILE @index < 10
BEGIN
PRINT ''
PRINT 'Index=' + CONVERT(varchar(2),@index)
SET @index = @index + 1
IF @index = 7
BEGIN
PRINT 'Le nombre 7 fait quitter le while'
BREAK
END
IF (@index -1) % 3 = 0
BEGIN
PRINT 'On passe la prochaine itration'
CONTINUE
END
PRINT 'Le nombre n''est pas un multiple de 3'
END

Sortie :
Index=0
On passe la prochaine itration
Index=1
Le nombre n'est pas un multiple de 3
Index=2
Le nombre n'est pas un multiple de 3
Index=3
On passe la prochaine itration
Index=4
Le nombre n'est pas un multiple de 3
Index=5
Le nombre n'est pas un multiple de 3
Index=6
Le nombre 7 fait quitter le while

Explications :
A chaque passage dans la boucle WHILE, on va afficher la variable @index, puis lincrmenter. La
nouveaut de cet exemple est que dans chaque itration, on teste si @index est gal 7. Dans ce cas,
on quitte le WHILE avec BREAK. On teste galement si le nombre est un multiple de 3. Si cest le
cas, on passe la prochaine itration avec CONTINUE. Si aucun de ces tests nest vrifi, on excute

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

47 / 67

la fin du WHILE qui consiste simplement ici prvenir lutilisateur que lindex en cours nest pas un
multiple de 3.
Observez galement que pour afficher une , il faut la doubler, pour indiquer que ce nest pas la
fin de la chane de caractre, mais une apostrophe. Cest le mme principe quen C et drivs o il faut
doubler le \ pour lafficher.

5.7.

GOTO / LABEL

Cette structure permet de dclarer des tiquettes et de sauter ces dernires. Cette structure tant peu
utilise, je ne ferai que donner un exemple simple :
DECLARE @index int
SET @index = 0
debut:
PRINT 'Index=' + CONVERT(varchar(2),@index)
SET @index = @index + 1
IF @index != 10
GOTO debut

Sortie :
Index=0
Index=1
Index=2
Index=3
Index=4
Index=5
Index=6
Index=7
Index=8
Index=9

Explications :
Le mot clef GOTO, change le flux dexcution pour indiquer au moteur SQL de passer ligne dfinie
par une tiquette. On utilise le : pour marquer une tiquette.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.8.

48 / 67

CASE (simple)

Il existe deux utilisation de CASE en T-SQL : le CASE simple ou le CASE de rechercher


Le CASE simple du T-SQL est lquivalent du Switch en C ou du Select Case en Visual Basic. Le
principe est de proposer une expression, et plusieurs propositions possible. Le moteur SQL basculera
alors sur la proposition gale lexpression.
Exemple :
DECLARE @anyNumber int, @anyString nvarchar(20)
SET @anyNumber = 42
SELECT @anyString =
CASE @anyNumber
WHEN 10 THEN
WHEN 24 THEN
WHEN 42 THEN
WHEN 68 THEN
ELSE 'aucun'
END

'dix'
'vingt quatre'
'quarante deux'
'soixante huit'

PRINT 'Le nombre est ' + @anyString

Sortie :
Le nombre est quarante deux

Explications :
La structure CASE retourne la valeur spcifie aprs le THEN lorsque lexpression spcifie est gale
la valeur donne avec WHEN.
Si aucune valeur nest trouve, on utilise alors celle spcifi avec ELSE. La clause ELSE tant
obligatoire.
Attention aux types, utilisez au besoin les fonctions de convertion.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.9.

49 / 67

CASE (recherche)

La deuxime variante du CASE consiste ne pas fournir dexpression comparer. Il faudra alors
fournir chaque WHEN une expression boolenne qui sera value. Si cette dernire est vrifie,
alors lexpression retourne sera celle du THEN correspondant.
Modifions notre prcdent exemple :
DECLARE @anyNumber int, @anyString nvarchar(20)
SET @anyNumber = 42
SELECT @anyString =
CASE
WHEN @anyNumber < 20
WHEN @anyNumber < 40
WHEN @anyNumber < 60
WHEN @anyNumber < 80
ELSE 'trs grand !'
END

THEN
THEN
THEN
THEN

'infrieur
'infrieur
'infrieur
'infrieur

vingt'
quarante'
soixante'
quatre-vingt'

PRINT 'Le nombre est ' + @anyString

Sortie :
Le nombre est infrieur soixante

Dans cette variante du CASE, on value une une chacune des expressions fournies aux WHEN,
jusqu en trouver une qui soit vraie. Dans ce cas, on retourne lexpression fournie avec le THEN
correspondant.

5.10.

Intgration de SQL

Dans les exemples prcdents, nous nutilisions que des variables locales. Vous pouvez bien sr
utiliser le SQL standard pour traiter les donnes.
Exemple avec un IF :
SELECT
UnitPrice,
CASE WHEN UnitPrice < 30 THEN 'pas cher'
WHEN UnitPrice < 60 THEN 'moyen cher'
ELSE 'trs cher'
END AS Comment
FROM Products

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

50 / 67

Sortie (tronque pour la mise en page) :


UnitPrice
--------------------18.0000
19.0000
10.0000
...
30.0000
62.5000
13.0000

Comment
---------pas cher
pas cher
pas cher
moyen cher
trs cher
pas cher

(77 ligne(s) affecte(s))

De la mme faon, on peut utiliser des variables dans des requtes INSERT, UPDATE, etc. Cest trs
utile pour les procdures stockes car vous pouvez utiliser les arguments de la procdure stocke. Plus
de dtails lors du chapitre sur les procdures stockes.
Exemple :
DECLARE @NewPrice money
DECLARE @ProductID int
SET @NewPrice = 4.5
SET @ProductID = 5
-- Affichage des donnes actuelles
SELECT ProductID, ProductName, Unitprice
FROM Products
-- Mise jour des donnes
UPDATE Products
SET UnitPrice = @NewPrice
WHERE ProductID = @ProductID
-- Affichage des donnes mises jour
SELECT ProductID, ProductName, Unitprice
FROM Products

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

51 / 67

Sortie (tronque):
ProductID
----------1
2
3
4
5
6

ProductName
---------------------------------------Chai
Chang
Aniseed Syrup
Chef Anton's Cajun Seasoning
Chef Anton's Gumbo Mix
Grandma's Boysenberry Spread

UnitPrice
--------------------18.0000
19.0000
10.0000
22.0000
18.5000
25.0000

.......................
76
77

Lakkalikri
Original Frankfurter grne Soe

18.0000
13.0000

(77 ligne(s) affecte(s))


(77 ligne(s) affecte(s))
ProductID
ProductName
----------- ---------------------------------------1
Chai
2
Chang
3
Aniseed Syrup
4
Chef Anton's Cajun Seasoning
5
Chef Anton's Gumbo Mix
6
Grandma's Boysenberry Spread
.......................

UnitPrice
--------------------18.0000
19.0000
10.0000
22.0000
4.5000
25.0000

76
77

18.0000
13.0000

Lakkalikri
Original Frankfurter grne Soe

(77 ligne(s) affecte(s))

Explications :
Cest un exemple simple dans lequel sont mixs lutilisation de variables et lutilisation de requtes
SQL.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.11.

52 / 67

Procdures stockes

5.11.1.

Dclarer une procdure stocke

Les procdures stockes peuvent sapparenter des fonctions du cot serveur. En effet, on va
programmer des requtes avec dventuels arguments, retours, etc. que lon appellera par la suite.
Voici un premier exemple de procdure stocke :
CREATE PROCEDURE GetProductID
AS
SELECT ProductID
FROM Products
GO

Cet exemple montre comment crer la procdure stocke. La premire ligne, indique que lon cre une
procdure stocke (CREATE PROCEDURE) du nom de GetProductID. Le nom est de la forme
suivante :
[owner].name
O owner est le propritaire (optionnel, utilisateur de la session par dfaut) et name le nom de
la procdure stocke.
Vous auriez donc aussi pu crire les lignes suivantes pour arriver au mme rsultat :
CREATE PROCEDURE dbo.GetProductID
AS
SELECT ProductID
FROM Products
GO

dbo tant le propritaire de la base de donne (DataBase Owner)


Ou :
CREATE PROCEDURE Steve.GetProductID
AS
SELECT ProductID
FROM Products
GO

Si lutilisateur Steve a les droits ncessaires.


Le mot clef GO permet dexcuter les oprations en cours. Cest utile si vous crez la procdure dans
une requte qui va immdiatement lutiliser.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.11.2.

53 / 67

Modification dune procdure stocke existante

Pour modifier une procdure stocke existante, vous pouvez utiliser le mot clef ALTER et non plus
CREATE pour changer le corps de la procdure. Changeons notre procdure stocke de tout lheure
pour afficher galement le nom des produits :
ALTER PROCEDURE GetProductID
AS
SELECT ProductID, ProductName
FROM Products
GO

La procdure est alors modifie.

5.11.3.

Appel dune procdure stocke

Pour appeler une procdure stocke, quelle soit dveloppe par un utilisateur ou quelle soit systme
(nous verrons plus loin ces diffrentes procdures stockes), il faut employer le mot clef EXEC ou
EXECUTE.
Ainsi, pour appeler notre procdure stocke GetProductID cite plus haut, utilisez :
EXEC GetProductID

Sortie (tronque) :
ProductID
----------17
3
...
64
47

ProductName
---------------------------------------Alice Mutton
Aniseed Syrup
Wimmers gute Semmelkndel
Zaanse koeken

(77 ligne(s) affecte(s))

Vous pouvez donc constater que la sortie est celle programme dans la procdure stocke. Vous
pouvez ainsi excuter tout type de requte dans une procdure stocke.

5.11.4.

Paramtres

Les procdures ne seraient pas intressantes si on ne pouvait pas spcifier de paramtres.


Heureusement, il est trs facile dcrire un procdure stocke paramtrable.
Ainsi, si on souhaite afficher le dtail dun des produits, on filtrera les donnes par son ProductID, que
lon spcifiera en paramtre :
CREATE PROCEDURE GetSingleProduct
(
@ProductID int
)
AS
SELECT ProductID, ProductName
FROM Products
WHERE ProductID=@ProductID
GO

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

54 / 67

Pour dclarer un paramtre, il suffit donc de le spcifier dans lentte de la procdure en lui indiquant :
Son nom : ici @ProductID (noubliez pas le @), qui sera utilisable comme une variable dans
la procdure stocke.
Un type de donne, choisi parmi les types SQL ou les types utilisateurs.
Une valeur par dfaut optionnelle.
Une direction, En mettant OUTPUT derrire le nom dun paramtre, vous pouvez indiquer
que le paramtre est un paramtre de sortie, mais nous y reviendrons.
Pour appeler alors une telle procdure, il faut toujours utiliser EXEC ou EXECUTE, en lui adjoignant
la liste des paramtres, soit explicitement en mettant autant de couple : @paramtre=Valeur que
ncessaire, spars par une virgule :
EXEC GetSingleProduct @ProductID=20

Soit en mettant les paramtres les uns la suite des autres dans lordre attendu par la procdure
stocke, toujours spars par une virgule :
EXEC GetSingleProduct 20

Les deux mthodes donneront ce mme rsultat :


ProductID
ProductName
----------- ---------------------------------------20
Sir Rodney's Marmalade
(1 ligne(s) affecte(s))

Il est recommand dutiliser explicitement les noms des paramtres, car si la procdure venait tre
change, les paramtres risquent de ne plus tre les mmes ou davoir le mme ordre.
De plus, il faut faire attention au type de donnes. En effet, le type du paramtre fourni, doit soit avoir
le mme type que celui du paramtre attendu, soit tre convertible implicitement.

5.11.5.

Paramtres optionnels

Vous pouvez spcifier pour chaque paramtre une valeur par dfaut. Modifions notre prcdente
procdure comme ceci (noubliez pas dutiliser ALTER et non plus CREATE puisque la procdure
existe dj) :
ALTER PROCEDURE GetSingleProduct
(
@ProductID int = null
)
AS
IF @ProductID IS null
BEGIN
SELECT ProductID, ProductName
FROM Products
END
ELSE
BEGIN
SELECT ProductID, ProductName
FROM Products
WHERE ProductID=@ProductID
END

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

55 / 67

GO

Cette procdure stocke a deux usages : soit on ne spcifie pas de paramtre (quivaut lui donner la
valeur null, puisque cest la valeur par dfaut) et il affiche tous les produits, soit on lui donne un entier
en paramtre, et il affichera le produit correspondant.

Premier cas de figure :

Appel avec :
EXEC GetSingleProduct @ProductID=20

Ou :
EXEC GetSingleProduct 20

Donnera :
ProductID
ProductName
----------- ---------------------------------------20
Sir Rodney's Marmalade
(1 ligne(s) affecte(s))

Deuxime cas de figure :

Appel avec :
EXEC GetSingleProduct @ProductID=default

Ou :
EXEC GetSingleProduct

Donnera :
ProductID
----------17
3
...
64
47

ProductName
---------------------------------------Alice Mutton
Aniseed Syrup
Wimmers gute Semmelkndel
Zaanse koeken

(77 ligne(s) affecte(s))

En effet, ne pas spcifier un paramtre lui donne sa valeur par dfaut. Bien sr, si le paramtre ne
possde pas de valeur par dfaut, une erreur surviendrait.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.11.6.

56 / 67

Direction des paramtres

Vous pouvez galement dfinir des paramtres de sortie. Ces paramtres sont modifis dans la
procdure stocke puis retourns lappelant.
Exemple : Insertion dun nouveau fournisseur (Shippers)
CREATE PROCEDURE AddShipper
(
@CompanyName nvarchar(40),
@Phone nvarchar(24),
@NewID int OUTPUT
)
AS
INSERT INTO Shippers
(
CompanyName,
Phone
)
VALUES
(
@CompanyName,
@Phone
)
SET @NewID=@@IDENTITY
GO

Puis pour utiliser ce paramtre :


DECLARE @InsertedID int
EXEC AddShipper
@CompanyName ='MS Press',
@Phone='01 45 00 49 87',
@NewID= @InsertedID OUTPUT
SELECT @InsertedID

On a donc dans un premier temps dclar notre paramtre @NewID comme tant un paramtre de
sortie. Dans la procdure stocke, on lui donne la fin la valeur de @@IDENTITY qui est une
fonction systme retournant le dernier ID insr dans la table, ce signifie que @NewID contiendra
lID du fournisseur cr linstant.
Ensuite, lors de lappel, nous avons tout dabord dclar une variable rceptacle , puis nous lavons
li au paramtre de sortie @NewID via : @NewID = @Inserted OUTPUT du EXEC. Noubliez
pas le mot clef OUTPUT, sinon, @Inserted ID gardera sa valeur davant lappel.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.11.7.

57 / 67

Procdures stockes systmes et prdfinies

Chaque base de donnes contient un certain nombre de procdures stockes prdfinies. Soit ce sont
des procdures stockes systme, soit incluses dans la base lors de sa cration. En effet, la cration de
la base de donne se fait en dupliquant la base de donne model . Si vous avez crit des procdures
stockes dans cette dernire, elles seront automatiquement copies dans la nouvelle base de donnes.
Pour ce qui est des procdures stockes systmes , ce sont des procdures stockes incluses dans
master que tout le monde peut appeler ( condition dy avoir le droit). Ces procdures servent
principalement ladministration du serveur, et nous ne pourrons pas les dtailler toutes ici sans sortir
du cadre de ce cours. Je vais simplement prsenter un exemple concret dutilisation : lajout dun
nouvel utilisateur une base de donne.

Cration du login sur le serveur :

En effet, chaque utilisateur de base de donnes doit tre logu sur le serveur avant de pouvoir utiliser
une base de donnes. Il faut donc crer un login pour une authentification SQL Server, ou accorder
un utilisateur le droit de se loguer, pour une authentification Windows. Dans notre cas, nous allons
ajouter un utilisateur Windows, donc accordons lui le droit de se loguer :
EXEC sp_grantlogin @Loginame='SATURNE\Matthieu'

Rsultat :
Connexion d'accs accorde pour 'SATURNE\Matthieu'.

Nous avons ici utilis la procdure stocke systme sp_grantlogin . Pour plus de dtails, consultez
laide, mais sachez que cette procdure attend entre autre, un nom dutilisateur Windows pour lui
accorder le droit de se connecter.

Ajout de cet utilisateur la base de donnes NorthWind

USE NorthWind
EXEC sp_grantdbaccess 'SATURNE\Matthieu'

Rsultat :
Accs accord la base de donnes 'SATURNE\Matthieu'.

Ici, cest la procdure stocke systme sp_grantdbaccess que nous avons utilis. USE
Northwind est ncessaire pour se placer dans la base de donnes NorthWind, pour donner laccs
cette dernire.

Attribution des droits :

Enfin, il faut indiquer quels sont les droits de cet utilisateur dans cette base de donne. Pour cela,
plutt que de donner les droits manuellement, nous allons linclure dans un groupe (ou rle) :
EXEC sp_addrolemember
@rolename='db_datareader',
@membername= 'SATURNE\Matthieu'

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

58 / 67

Enfin, nous avons inclut lutilisateur ainsi cre dans le rle db_datareader .
Pour conclure avec les procdures stockes, je vous invite consulter laide pour connatre lutilit de
chacune, et leur syntaxe. La plupart de ses procdures tant destines ladministrateur, vous naurez
que peu souvent besoin de vous en servir.

5.12.

Transactions

5.12.1.

Utilit

Les transactions permettent de dfinir des blocs de code dont le succs dexcution doit tre trait
comme un seul bloc. Plus clairement, toutes les instructions comprises dans la transaction doivent tre
excutes avec succs, ou tout le bloc sera annul.
Quel est lintrt ? Imaginons linsertion dune facture et des lignes de facturation associes. La
premire chose faire est dinsrer lenregistrement dune facture, puis, pour chaque ligne insre
lenregistrement correspondant. Si on essaye dinsrer une ligne de facturation dont le produit nexiste
pas (erreur de clef primaire/trange), une erreur va tre gnre. Deux cas de figure :
Sans transaction :
o La facture sera insre
o la premire ligne de facturation va tre insre
o la seconde ligne
o
o la nime ligne : provoque une erreur
o la requte est interrompue
o au final : une facture ajoute, et n-1 lignes alors que la facture nest pas valide.
Avec transaction :
o La facture sera insre
o la premire ligne de facturation va tre insre
o la seconde ligne
o
o la nime ligne : provoque une erreur
o la requte est interrompue ET ANNULEE.
o au final : les modifications (insertion dune facture et n-1 lignes) ne seront pas prises
en compte car la transaction naura pas t excute avec succs.
Lintrt des transactions est donc de permettre dattendre quune requte soit compltement termine
avant de valider les modifications.

5.12.2.

Exemple :

Les transactions sont faciles mettre en place en T-SQL. Observez cet exemple qui excute deux fois
la mme chose, une fois sans et une fois avec une transaction:
-- Etat initial
PRINT 'Lignes actuelles de la commande 10248 :'
PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248
/* Ajout sans transaction d'une ligne valide et
d'une ligne non valide (product ID inexistant)*/

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server
PRINT ''
PRINT 'Ajout du produit n14'
PRINT ''
INSERT INTO [Order Details]
( OrderID, ProductID, UnitPrice, Quantity, Discount )
VALUES
( 10248 , 14, 10, 1, 0)
PRINT ''
PRINT 'Ajout du produit n14000'
PRINT ''
INSERT INTO [Order Details]
( OrderID, ProductID, UnitPrice, Quantity, Discount )
VALUES
( 10248 , 14000, 10, 1, 0)
-- Etat actuel :
PRINT ''
PRINT 'Lignes actuelles de la commande 10248 :'
PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248
/* Ajout avec transaction d'une ligne valide et
d'une ligne non valide (product ID inexistant)*/
PRINT
PRINT
PRINT
BEGIN

''
'Dbut de la transaction'
''
TRANSACTION myTran

PRINT ''
PRINT 'Ajout du produit n65'
PRINT ''
INSERT INTO [Order Details]
( OrderID, ProductID, UnitPrice, Quantity, Discount )
VALUES
( 10248 , 65, 10, 1, 0)
PRINT ''
PRINT 'Ajout du produit n1111'
PRINT ''
INSERT INTO [Order Details]
( OrderID, ProductID, UnitPrice, Quantity, Discount )
VALUES
( 10248 , 1111, 10, 1, 0)
IF @@ERROR <>0
ROLLBACK TRANSACTION myTran
ELSE
COMMIT TRANSACTION myTran
PRINT ''
PRINT 'Fin de la transaction'
PRINT ''
-- Etat actuel
PRINT ''
PRINT 'Lignes actuelles de la commande 10248 :'

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

59 / 67

SQL Server

60 / 67

PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248

Sortie :
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248

ProductID
----------11
42
72

UnitPrice
--------------------14.0000
9.8000
34.8000

(3 ligne(s) affecte(s))
Ajout du produit n14
(1 ligne(s) affecte(s))
Ajout du produit n14000
Serveur : Msg 547, Niveau 16, tat 1, Ligne 1
Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY
'FK_Order_Details_Products'. Le conflit est survenu dans la base de donnes
'Northwind', table 'Products', column 'ProductID'.
L'instruction a t arrte.
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248
10248

ProductID
----------11
14
42
72

UnitPrice
--------------------14.0000
10.0000
9.8000
34.8000

(4 ligne(s) affecte(s))
Dbut de la transaction
Ajout du produit n65
(1 ligne(s) affecte(s))
Ajout du produit n1111
Serveur : Msg 547, Niveau 16, tat 1, Ligne 1
Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY
'FK_Order_Details_Products'. Le conflit est survenu dans la base de donnes
'Northwind', table 'Products', column 'ProductID'.
L'instruction a t arrte.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

61 / 67

Fin de la transaction
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248
10248

ProductID
----------11
14
42
72

UnitPrice
--------------------14.0000
10.0000
9.8000
34.8000

(4 ligne(s) affecte(s))

Droulement de la requte.
Tout dabord, on affiche ltat actuel de la commande n10248 en affichant toutes les lignes
de facturation associes. Pour le moment il y en a 3
On tente ensuite dinsrer deux nouveaux enregistrements. Le deuxime est volontairement
invalide (contraintes de clef trangre) pour gnrer une erreur. Le droulement passe alors
sur le premier INSERT sans problme tandis que le second provoque lerreur souhaite. On
affiche alors ltat actuel, et on se rend compte quil ya 4 lignes, celle en plus provenant du
premier INSERT, le deuxime INSERT tant annul.
On retente la mme chose, cette fois ci en englobant le mme genre dinstructions dans une
transaction.
o La premire chose faire est de dclarer la transaction avec BEGIN
TRANSACTION nom_de_la_transaction . Le nom est facultatif mais permet
didentifier prcisment la transaction.
o Viennent ensuite les instructions potentiellement gnratrices derreur.
o Vous pouvez alors ordonner la transaction soit de valider les modifications via la
commande COMMIT nom_de_la_transaction , soit dannuler les modifications en
utilisant ROLLBACK nom_de_la_transaction . Ainsi, dans notre exemple, on teste
la prsence dune erreur avec @@ERROR qui nest 0 que si le droulement cest
bien pass. Si il ya eu une erreur, on annule les modifications, sinon on les valide.
Dans le corps de la transaction, le premier INSERT est valide, le second provoquera une
erreur. Mais comme nous lavons englob dans une transaction, les deux seront ignors. Il
nest donc pas surprenant de voir quil ny a toujours que 4 lignes et non 5.
Les transactions sont donc utiles pour dfinir des points de validits au sein dune requte. Il faut
toutefois noter quune procdure stocke est une transaction implicite . Ainsi, si dans une procdure
stocke une erreur devait survenir, toute la procdure est annule.
Exemple :
-- Cration de la procdure stocke
CREATE PROCEDURE InsertSomething
(
@OrderID
int,
@ProductID int,
@UnitPrice money,
@Quantity
smallint,
@Discount
real
)
AS
INSERT INTO [Order Details]
(
http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

62 / 67

OrderID,
ProductID,
UnitPrice,
Quantity,
Discount
)
VALUES
(
@OrderID ,
@ProductID,
@UnitPrice,
@Quantity,
@Discount
)
GO
-- Etat initial
PRINT ''
PRINT 'Lignes actuelles de la commande 10248 :'
PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248
-- Excution de la procdure stocke avec des valeurs "valables"
EXEC InsertSomething 10248, 65, 10, 1, 0
-- Etat actuel
PRINT ''
PRINT 'Lignes actuelles de la commande 10248 :'
PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248
-- Excution de la procdure stocke avec des valeurs non "valables"
EXEC InsertSomething 10248, 11111, 10, 1, 0
-- Etat actuel
PRINT ''
PRINT 'Lignes actuelles de la commande 10248 :'
PRINT ''
SELECT OrderID, ProductID, UnitPrice
FROM [Order Details]
WHERE OrderID=10248

Sortie :
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248

ProductID
----------11
42
72

UnitPrice
--------------------14.0000
9.8000
34.8000

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

63 / 67

(3 ligne(s) affecte(s))
(1 ligne(s) affecte(s))
(7 ligne(s) affecte(s))
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248
10248

ProductID
----------11
42
65
72

UnitPrice
--------------------14.0000
9.8000
10.0000
34.8000

(4 ligne(s) affecte(s))
Serveur : Msg 547, Niveau 16, tat 1, Procdure InsertSomething, Ligne 10
Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY
'FK_Order_Details_Products'. Le conflit est survenu dans la base de donnes
'Northwind', table 'Products', column 'ProductID'.
L'instruction a t arrte.
Lignes actuelles de la commande 10248 :
OrderID
----------10248
10248
10248
10248

ProductID
----------11
42
65
72

UnitPrice
--------------------14.0000
9.8000
10.0000
34.8000

(4 ligne(s) affecte(s))

Vous pouvez constater que sans avoir eu dclarer une transaction, les INSERT non valables sont
ignors. En effet, ces INSERT sont inclus dans une procdure stocke. Cette dernire contient une
transaction implicite, et donc, sil y a une erreur, toute la procdure sera annule.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

5.13.

Curseurs

Les curseurs permettent de parcourir un jeu de donnes ligne par ligne.


Exemple :
-- Dclaration du curseur
DECLARE myCursor CURSOR LOCAL
FOR
SELECT OrderID, ProductID, UnitPrice, Quantity
FROM [Order Details]
WHERE OrderID = 10248
-- Ouverture du curseur
OPEN myCursor
-- Premire rcupration
FETCH NEXT FROM myCursor
-- Puis on boucle tant qu'il reste des lignes rcuprer
WHILE @@FETCH_STATUS = 0
BEGIN
-- Ceci est excut pour chaque ligne du curseur
FETCH NEXT FROM myCursor
END
-- Fermeture et dchargement du curseur
CLOSE myCursor
DEALLOCATE myCursor

Sortie :
OrderID
ProductID
UnitPrice
Quantity
----------- ----------- --------------------- -------10248
11
14.0000
12
(0 ligne(s) affecte(s))
OrderID
ProductID
UnitPrice
Quantity
----------- ----------- --------------------- -------10248
42
9.8000
10
(0 ligne(s) affecte(s))
OrderID
ProductID
UnitPrice
Quantity
----------- ----------- --------------------- -------10248
72
34.8000
5
(0 ligne(s) affecte(s))
OrderID
ProductID
UnitPrice
Quantity
----------- ----------- --------------------- -------(0 ligne(s) affecte(s))

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

64 / 67

SQL Server

65 / 67

Lutilisation dun curseur se fait en plusieurs tapes :


La dclaration : un curseur tant une variable (bien quun peu particulire), il faut la dclarer
avec DECLARE, le type tant alors CURSOR. Il y a ensuite le mot clef LOCAL, qui indique
que le curseur ne sera disponible que pour la session en cours. Vous pouvez galement
spcifier GLOBAL, la valeur par dfaut tant dfinie par loption du serveur default to local
cursor qui est false par dfaut.
FOR select statement : On spcifie ici la requte voulue. Le curseur va ensuite balayer ligne
par ligne les rsultats de cette requte. Dans notre exemple, cest un simple SELECT
OPEN : permet douvrir le curseur. Cest ce moment que la requte spcifie sera excute
pour fournir un certain nombre denregistrements au curseur
FETCH NEXT : permet de lire la ligne en cours. Le rsultat est retourn dans la fonction
systme @@FETCH_STATUS qui contiendra 0 si le curseur na plus de ligne disponible. Il
existe dautres options que NEXT : PRIOR, FIRST, LAST, ABSOLUTE, RELATIVE mais il
faut que vous ayez spcifi dans la dclaration du curseur le droit de lutiliser. Consultez
laide si vous avez besoin de telles fonctionnalits.
CLOSE : permet de fermer le curseur
DEALLOCATE : permet de librer les ressources. Optionnel ici car le curseur est dclar en
LOCAL et est donc automatiquement libr la fin de la requte.
Cette requte rcupre tout dabord une premire ligne. Si @@FETCH_STATUS vaut 0, la boucle
WHILE sera de toute faon non excute, tandis que si cest diffrent de 0, elle sera excute, car on
sait quil y a une ligne disponible au curseur. Nous sommes obligs de passer par un double FETCH
(un seul au dbut puis un dans la boucle WHILE) car lquivalent du DO WHILE de certains langages
nexistent pas.
Pour le moment cette requte ne fait que parcourir les lignes. Il serait bien plus intressant de traiter
les lignes une une.
Modifions donc notre requte prcdente :
-- Dclaration de variables tampon
DECLARE
@OrderID
int,
@ProductID int,
@UnitPrice money,
@Quantity
smallint
-- Dclaration du curseur
DECLARE myCursor CURSOR LOCAL
FOR
SELECT OrderID, ProductID, UnitPrice, Quantity
FROM [Order Details]
WHERE OrderID = 10248
-- Ouverture du curseur
OPEN myCursor
-- Premire rcupration
FETCH NEXT FROM myCursor
INTO @OrderID, @ProductID, @UnitPrice, @Quantity
-- Puis on boucle tant qu'il reste des lignes rcuprer
WHILE @@FETCH_STATUS = 0
BEGIN
-- Ceci est excut pour chaque ligne du curseur
PRINT 'OrderID: ' + CONVERT(nvarchar(50),@OrderID)
PRINT CONVERT(nvarchar(50), @Quantity) +

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

66 / 67

' exemplaires de produit ayant ' +


CONVERT(nvarchar(50), @ProductID) +
' pour rfrence'
PRINT 'Prix l''unit : ' +
CONVERT(nvarchar(50), @UnitPrice)
PRINT 'Soit un total de : ' +
CONVERT(nvarchar(50), @UnitPrice * @Quantity)
PRINT ''

END

-- on rcupre les valeurs pour la prochaine ligne


FETCH NEXT FROM myCursor
INTO @OrderID, @ProductID, @UnitPrice, @Quantity

-- Fermeture et dchargement du curseur


CLOSE myCursor
DEALLOCATE myCursor

Rsultat :
OrderID: 10248
12 exemplaires de produit ayant 11 pour rfrence
Prix l'unit : 14.00
Soit un total de : 168.00
OrderID: 10248
10 exemplaires de produit ayant 42 pour rfrence
Prix l'unit : 9.80
Soit un total de : 98.00
OrderID: 10248
5 exemplaires de produit ayant 72 pour rfrence
Prix l'unit : 34.80
Soit un total de : 174.00

Cette fois, nous avons spcifi FETCH ce quil doit faire des lignes de rsultat, c'est--dire les copier
dans les variables @OrderID, @ProductID, @UnitPrice et @Quantity. Faites bien attention, cest dans
lordre des sorties de la requte dclare dans le curseur. Ici, la colonne OrderID du SELECT du
curseur sera copie dans @OrderID et ainsi de suite.
Ces variables servent ensuite aux traitements.
Notez au passage lutilisation de CONVERT qui permet de faire des conversions explicites. Ici, on
convertit des entiers et un montaire en chane nvarchar(50).

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

SQL Server

67 / 67

6. Conclusion
Ce document devrait vous avoir permis de dcouvrir SQL Server. Cest un SGBDR puissant et
complet avec lequel vous pourrez dvelopper des applications trs performantes et trs rapidement,
notamment grce aux supports de XML et de HTTP ainsi que grce au Transact SQL.
Vous pourrez galement voir dans le cours sur ADO.Net (http://www.labo-dotnet.com, rubrique
Supinfo Dotnet Training Courses) que vous pourrez accder aux donnes depuis le framework avec
une simplicit dconcertante.

http://www.labo-dotnet.com
Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

Vous aimerez peut-être aussi