Procédure stockée : code après le END quand même exécuté ?
Hello tout le monde.
Je viens de tomber sur un truc hyper bizarre.
Dans un script de déploiement de base données (c'est un PostDeployementScript dans un DatabaseProject pour ceux que ça intéresse), j'avais oublié de mettre un "GO" après la création d'une procédure stockée.
Or, après la création de cette procédure, j'avais un test d’existence d'un user-defined table type et sa suppression si le test est positif (pour le récréer juste derrière au cas où il y aurait eu une modif).
J'obtiens donc ceci quand je vais voir le code la procédure stockée en question dans SSMS :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| ALTER PROCEDURE [S_MESSAGES].[UP_GET_MESSAGE] @USER_ID UNIQUEIDENTIFIER,
@MESSAGE_ID UNIQUEIDENTIFIER
AS
BEGIN
SELECT ID, DateSent, DateRead, Code, Title, Body, RecipientId
FROM V_MESSAGES
WHERE RecipientId = @USER_ID
AND ID = @MESSAGE_ID;
END
IF EXISTS(SELECT 1 FROM sys.types WHERE is_table_type = 1 AND name = 'TRANSLATION')
DROP TYPE DBO.TRANSLATION; |
Alors ma question est : Pourquoi ces deux dernières lignes de code sont-elles exécutées quand j'exécute la procédure. Elles se trouvent quand même après le END qui marque la fin du corps de la procédure.
J'ai d'abord pensé que le moteur allait chercher le texte à exécuter dans la catalogue et vu que c'était dedans, bin c'est exécuté et tant pis mais si je vais voir dans la vue INFORMATION_SCHEMA.ROUTINES, voici ce que j'ai dans la colonne ROUTINE_DEFINITION :
Code:
1 2 3 4 5 6 7 8
| CREATE PROCEDURE [S_MESSAGES].[UP_GET_MESSAGE] @USER_ID UNIQUEIDENTIFIER,
@MESSAGE_ID UNIQUEIDENTIFIER
AS
BEGIN
SELECT ID, DateSent, DateRead, Code, Title, Body, RecipientId
FROM V_MESSAGES
WHERE RecipientId = @USER_ID AND ID = @MESSAGE_ID;
END |
Le IF final n'y est pas. Donc je ne comprends pas.
EDIT : Mais comme je l'obtiens en faisant clic-droit > Modifier, j'imagine que SSMS (et donc le moteur sql qui exécute la procédure) ne va pas chercher le code au même endroit que moi.
Merci d'avance à ceux qui prendront le temps de lire ceci et d'éclaire ma lanterne.