Je dois écrire un script de déploiement qui fonctionnera si une procédure stockée existe ou n'existe pas. c'est-à-dire s'il existe, je dois le modifier, sinon le créer.
Comment puis-je faire cela dans le sql.
J'utilise SQL Server 2005
sql
sql-server-2005
stored-procedures
GordyII
la source
la source
Réponses:
Si vous SUPPRIMEZ et CRÉER la procédure, vous perdrez les paramètres de sécurité. Cela pourrait ennuyer votre DBA ou casser complètement votre application.
Ce que je fais, c'est créer une procédure stockée triviale si elle n'existe pas encore. Après cela, vous pouvez MODIFIER la procédure stockée à votre guise.
De cette façon, les paramètres de sécurité, les commentaires et autres méta-détails survivront au déploiement.
la source
if object_id('YourSp') is null BEGIN ... END
pour ajouter les autorisations appropriées après la création de la procédure stockée.La manière la plus propre est de tester son existence, de la supprimer si elle existe, puis de la recréer. Vous ne pouvez pas incorporer une instruction "create proc" dans une instruction IF. Cela devrait bien faire:
la source
Si vous utilisez uniquement des procédures stockées, la chose la plus simple à faire est probablement de supprimer le processus, puis de le recréer. Vous pouvez générer tout le code pour ce faire à l'aide de l'assistant Générer des scripts dans SQL Server.
la source
De,
SQL Server 2016 CTP3
vous pouvez utiliser de nouvelles instructions DIE au lieu de grosIF
wrappersSyntaxe:
Requete:
Plus d'infos ici
la source
où
xxx
est le nom du procla source
En plus de ce qui a déjà été dit, j'aime également ajouter une approche différente et préconiser l'utilisation d'une stratégie de déploiement de scripts différentiels. Au lieu de créer un script avec état qui vérifie toujours l'état actuel et agit en fonction de cet état, déployez via une série de scripts sans état qui sont mis à niveau à partir de versions bien connues . J'ai utilisé cette stratégie et elle est très rentable car mes scripts de déploiement sont désormais tous «IF» gratuits.
la source
Vous pouvez écrire une requête comme suit:
Pour être plus précis sur la syntaxe ci-dessus:
OBJECT_ID est un numéro d'identification unique pour un objet dans la base de données, il est utilisé en interne par SQL Server. Puisque nous passons ProcedureName suivi de votre type d'objet P qui indique au serveur SQL que vous devez trouver l'objet appelé ProcedureName qui est de type procedure, c'est-à-dire P
Cette requête trouvera la procédure et si elle est disponible, elle la supprimera et en créera une nouvelle.
Pour des informations détaillées sur OBJECT_ID et les types d'objets, veuillez visiter: SYS.Objects
la source
la source
J'ai un proc stocké qui permet au client d'étendre la validation, s'il existe, je ne veux pas le changer, si ce n'est pas le cas, je veux le créer, de la meilleure façon que j'ai trouvée:
la source
Le code ci-dessous vérifiera si la procédure stockée existe déjà ou non.
S'il existe, il changera, s'il n'existe pas, il créera une nouvelle procédure stockée pour vous:
la source
Une meilleure option pourrait être d'utiliser un outil comme Red-Gate SQL Compare ou SQL Examiner pour comparer automatiquement les différences et générer un script de migration.
la source