Conception Et Réalisation (SQL Server) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

La clause OUTPUT

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.