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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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 :
Le IF final n'y est pas. Donc je ne comprends pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager