J'ai un script SQL qui doit être exécuté chaque fois qu'un client exécute la fonctionnalité "gestion de base de données". Le script comprend la création de procédures stockées sur la base de données du client. Certains de ces clients pourraient déjà avoir la procédure stockée lors de l'exécution du script, et d'autres non. J'ai besoin que les procédures stockées manquantes soient ajoutées à la base de données du client, mais j'ai beau essayer de plier la syntaxe T-SQL, je n'obtiens que les résultats suivants
CREATE/ALTER PROCEDURE" doit être la première instruction d'un lot de requêtes.
J'ai lu que le fait de laisser tomber avant de créer fonctionne, mais je n'aime pas le faire de cette façon.
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'MyProc')
DROP PROCEDURE MyProc
GO
CREATE PROCEDURE MyProc
...
Comment puis-je ajouter la vérification de l'existence d'une procédure stockée et la créer si elle n'existe pas mais la modifier si elle existe ?
2 votes
Non, cela ne fonctionne pas, parce que cela crée une procédure stockée, ce qui n'est pas ce que l'on veut. d'après ce que l'on peut voir, elle ne la supprime pas non plus une fois qu'elle est terminée, donc elle est définitivement stockée dans tous les aspects du terme. elle est pas non pertinent pourquoi vous avez besoin d'une procédure non stockée
0 votes
Qu'entendez-vous par procédure "non stockée" ? Votre échantillon ne fait que recréer une procédure stockée ; quel est le rapport avec votre question ?
0 votes
Ok, nous y voilà. Le truc, c'est que j'ai un ÉNORME script SQL que de nombreux clients utilisent et qui doit être exécuté minutieusement chaque fois qu'un client exécute la fonctionnalité de "gestion de base de données" que notre logiciel fournit. Ainsi, certains de ces clients peuvent déjà avoir la procédure stockée lors de l'exécution du script, et d'autres non. Je sais que c'est stupide, je n'ai en fait pas besoin que cette procédure reste non stockée, je peux juste vérifier si elle existe et la créer si ce n'est pas le cas. Cependant, peu importe à quel point j'essaie de plier la syntaxe T-SQL, il y a toujours une erreur.
0 votes
Chaque fois qu'ils exécutent le script, il essaiera de créer la procédure à nouveau (malheureusement, tout doit être scripté dans le même fichier .sql, y compris l'appel à la procédure de création). IF NOT EXISTS THEN CREATE ne fonctionne pas à cause des limitations de la syntaxe. Que puis-je faire ?
3 votes
Duplicata possible de stackoverflow.com/questions/937908/
0 votes
Clic droit sur Stored Proc dans ObjectExplorer -> script -> Drop & Create ( Geoff a la syntaxe )
0 votes
Également demandé à stackoverflow.com/questions/22950165/ - avec au moins une autre suggestion (en utilisant SET NOEXEC ON si le SP existe)
0 votes
Si l'objet a un abonnement de réplication, il y aura une erreur lors d'un simple appel DROP PROC. La vérification négative permet de contourner ce problème en vérifiant que l'objet n'existe pas, et si c'est le cas, elle crée un shell. Dans tous les cas, un ALTER doit suivre.