J'ai un script qui possède une instruction code> de base de données code>. Le script fonctionne parfaitement bien si la base de données existe. Si cela n'existe pas, il échoue avec le message "La base de données n'existe pas", ce qui permet un sens parfait.
Maintenant, je ne l'échoue pas, alors j'ai ajouté un chèque pour sélectionner si le DB existe sur sys.databases (que je représenterai ici avec un à ma surprise, le script a continué à défaut. J'ai donc essayé d'ajouter un bloc d'attraction. Même résultat.
Il semble que la déclaration d'utilisation soit évaluée avant toute autre chose, quelle id gênante parce que maintenant mon script peut casser. P> Donc, ma question est la suivante: comment puis-je avoir une instruction code> utiliser code> sur un script à une base de données qui peut ne pas exister? p> si 1 = 2 code> Vérifiez le sakant de simplicité), donc, si le DB existe (1 = 1), puis exécutez l'instruction "Utilisez". P>
BEGIN TRY
IF (1=1) BEGIN --if DB exists
USE DB_THAT_MAY_NOT_EXIST
END
END TRY
BEGIN CATCH
END CATCH
3 Réponses :
à quoi ça se passe? Peut-être que vous pouvez vérifier de cette façon. ou essayez ceci: p> donc pour table: p> sp_msforeachdb âselect * from ?.sys.tablesâ
J'ai fini par utiliser votre idée si (db_id ('$ (dbname)') n'est pas null) commence (son script VSQL). Merci!
En haut de la tête, vous pouvez qualifier pleinement toutes vos références pour éviter la déclaration code> code>. J'espère que quelqu'un propose une solution qui nécessite moins de PT.
Après avoir vérifié si le DB existe, au lieu de p> p> < Pré> xxx pré> p>
Beaucoup de déclarations n'acceptent pas 3 noms de pièces. Comme la procédure de création
Je ne crois pas que vous puissiez faire ce que vous voulez faire. Documentation Spécifie que En tant que tel, Comme une autre réponse suggère, utilisez le qualificatif de base de données dans tous vos noms. P> Vous pouvez également vérifier si une base de données existe, sans passer à elle. Voici un moyen: p> Utiliser code> est exécuté à em> compiler heure et heure d'exécution.
Utiliser code> sur une base de données qui n'existe pas va créer une heure de compilation Erreur. Je ne suis pas au courant d'un moyen de contourner les erreurs de temps compilés. P>
C'est en fait une bonne idée, mais le problème est que, quelle que soit la base de données existante ou non, j'ai toujours besoin de "utiliser" cela afin que le script échouera toujours
Quelle est la taille de ce script @diego? Il pourrait être plus facile de qualifier complètement vos noms de table et d'envelopper l'ensemble du script dans un
s'il existe ... code> mais cela dépend entièrement de ce que vous voulez faire si la base de données ne i> existe.
En outre, peut-être Cette question est une duplication potentielle.