Bonjour,
Nous avons un petit soucis quand nous créons des SP, si le nom de la table n'est pas valide il accepte de créer la SP.
Il y a moyen d'éviter ça?
Bonjour,
Nous avons un petit soucis quand nous créons des SP, si le nom de la table n'est pas valide il accepte de créer la SP.
Il y a moyen d'éviter ça?
Bonjour,
On peut par défaut créer une procédure stockée en référençant une table qui n'existe pas, étant donné que la compilation est déférée au moment de l'exécution.
Quel est exactement le message d'erreur que vous obtenez ?
@++
Aucun message la SP se crée correctement hélas
Mais bon le jour où j’exécute réellement la celle-ci me dira que la table X n’existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE PROCEDURE Test ( @NO_ADR INT ) AS BEGIN SET NOCOUNT ON; SELECT * FROM Adrese WHERE NO_ADR = @NO_ADR; ENDC'est un peu bête de se rendre compte seulement lors de l'utilisation du programme que le développeur à taper "Adrese" au lieu de "Adresse"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 EXEC @return_value = [dbo].[Test] @NO_ADR = 1 Invalid object name 'Adrese'.
Il n'y aurait pas une solution simple pour éviter ce genre de problème?
Je me vois mal demander à chaque développeurs de tester l’exécute manuellement de chaque SP qu'ils créent ou modifient
J'ai peut-être trouvé une solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select o.type, o.name, ed.referenced_entity_name, ed.is_caller_dependent from sys.sql_expression_dependencies ed join sys.objects o on ed.referencing_id = o.object_id where ed.referenced_id is null
Dans quel schéma se trouve la table Adresse ?
SELECT OBJECT_SCHEMA_NAME(OBJECT_ID('T_EMP'), DB_ID())
@++
Une solution un peu radicale mais qui doit marcher après avoir créer la procédure stockée:
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXEC sp_recompile <procedure>
Ou alors sp_refreshsqlmodule ?
@++
indique simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXEC sp_recompile <procedure>
Object 'test' was successfully marked for recompilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sys.sp_refreshsqlmodule 'dbo.Test'
Avec la requête par contre j'obtiensCommand(s) completed successfully.
Donc j'ai pu identifier que ma SP dbo.Test fait appel à une table non référencé Adrese
type Schema Name referenced_entity_name P dbo Test Adrese
Merci de votre aide
Votre procédure stockée référence la table Adrese, donc cela devrait fonctionner.
Que vous retourne la petite requête que je vous ai donné ?
Comment réalisez-vous les tests unitaires alors ?Je me vois mal demander à chaque développeurs de tester l’exécute manuellement de chaque SP qu'ils créent ou modifient
Mon avis c'est que toute modification ou création de code doit être testée.
@++
Si vous voulez tester l'existence d'une table :
Cela fait que je ne comprends pas ce que vous souhaitez faire avec la procédure stockée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 IF OBJECTPROPERTYEX(OBJECT_ID('dbo.Adrese'), 'IsTable') = 1 BEGIN ... END
Pourriez-vous clarifier ?
@++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager