![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
SQL Server crée et gère automatiquement les tables inserted et deleted qui ont la même
structure que la table sur laquelle porte la requête INSERT, UPDATE, DELETE ou MERGE.
Avant SQL Server 2005, on pouvait accéder à ces tables uniquement à partir d’un
déclencheur. On peut désormais accéder à ces tables directement dans le cadre d’une
instruction INSERT, UPDATE, DELETE ou MERGE, grâce à la clause OUTPUT.
La clause OUTPUT permet de travailler avec ces tables de 2 manières :
. Elle permet de retourner leur contenu directement à l’application, en tant qu’ensemble de
résultats
155
. Elle permet d’insérer leur contenu dans une table ou variable de table.
Exemple 1 : Supprimer tous les employés de la table EMPLOYES et retourner à l’application
l’ensemble des lignes supprimées.
DELETE FROM EMPLOYES OUTPUT deleted.*
Exemple 2 : Insérer une ligne dans la table EMPLOYES, et retourner à l’application le champ
de la table inserted contenant le numéro d’employé.
DECLARE @Tajout table(num int )
INSERT INTO EMPLOYES (NOEMP, NOM, PRENOM, DEPT)
VALUES (00140,'REEVES','HUBERT','A00')
OUTPUT inserted.NOEMP INTO @Tajout
On pourra ensuite visualiser les données ajoutées en affichant le contenu de la table Tajout.
Exemple 3 : Supprimer les employés de la table EMPLOYES du département B00 et les
renvoyer dans une variable table à l’application.
DECLARE @EmpTableB00 table (
NOEMP int NOT NULL,
NOM varchar(40) NOY NULL,
PRENOM varchar(20) NOT NULL,
SALAIRE int NULL)
DELETE EMPLOYES
OUTPUT deleted.NOEMP,
deleted.NOM,
deleted.PRENOM,
deleted.SALAIRE
INTO @EmpTableB00
WHERE DEPT ='B00'
-- Affichage de la table créée
SELECT NOEMP, NOM, PRENOM, SALAIRE FROM @EmpTableB00
Les messages d’erreurs
Pour chaque erreur, SQL Server produit un message d’erreur. La plupart de ces messages
sont définis dans SQL Server, mais il est possible de définir ses propres messages grâce à la
procédure stockée système sp_addmessage.
Tous les messages stockés à l'aide de sp_addmessage peuvent être affichés grâce à
l'affichage catalogue sys.messages.
SELECT * FROM SYS.MESSAGES
Exemple 1 : Ajout d’un message simple mentionnant qu’un employé n’existe pas
EXECUTE sp_addmessage 50001, 16, 'Le code employé est inexistant',
'us_english'
EXECUTE sp_addmessage 50001, 16, 'Le code employé est inexistant'
Le message est d’abord ajouté en langue anglaise, puis en français.
Exemple 2 : Ajout d’un message simple mentionnant que l’employé {code} n’existe pas dans
le service {nom}.
156
EXECUTE sp_addmessage 50002, 16, 'Le code employé %d est inexistant dans le
service %s', 'us_english'
EXECUTE sp_addmessage 50002, 16, 'Le code employé %1 ! est inexistant dans
le service %2 !'
La syntaxe exacte de l’expression de format de la variable prévoit l’espacement et la
justification, le nombre maximum de caractères à prendre en compte.
Utilisation de NOCOUNT, EXISTS
NOCOUNT : Empêche le message indiquant le nombre de lignes affectées par une instruction
Transact-SQL d'être renvoyé en tant que résultat.
SET NOCOUNT {ON | OFF}
Si SET NOCOUNT est activée (ON), le chiffre indiquant le nombre de lignes affectées par une
instruction Transact-SQL n'est pas renvoyé. Si la valeur de SET NOCOUNT est définie sur
OFF, ce chiffre est renvoyé.
EXISTS : Précise une sous-requête pour déterminer l'existence ou non de lignes.