J'utilise SQL Server 2008 et j'essaie de modifier le nom de la base de données actuel en une variable. Je fais normalement cela explicitement avec la déclaration J'ai essayé ce qui suit mais pas semble fonctionner car il continue à appliquer le reste des codes code> Créer des tables code> sur utilise myDatabasename code>.
La question se pose parce que si je suis en cours d'exécution d'un script et si je ne modifie pas le nom de la base de données, il crée toutes les tables de la base de données
[maître] code>.
[maître] code>. p>
3 Réponses :
Exécution Vous pouvez utiliser Utiliser quelque_db code> dans Dynamic SQL fonctionne, mais malheureusement, lorsque le contexte de la base de données est modifié à l'origine de ce qu'il était à l'origine.
sqlcmd code>
mode pour cela (actionnez-le sur la" requête " "Menu dans le studio de gestion). P> :setvar dbname "MyNewDatabaseName"
IF DB_ID('$(dbname)') IS NULL
BEGIN
DECLARE @SqlQuery NVARCHAR(1000);
SET @SqlQuery = N'CREATE DATABASE ' + QUOTENAME('$(dbname)') + '
COLLATE SQL_Latin1_General_CP1_CI_AS'
EXEC(@SqlQuery)
END
GO
USE $(dbname)
GO
+1 - C'est exactement (ou bien, très proche) à ce que je répondais. Mais vous êtes vraiment rapide :-)
Est-il possible de passer du mode sqlcmd code> en mode SQL dynamique dans la même requête?
@Rick - ayant sqlcmd code> activé ne vous empêche pas d'utiliser des constructions SQL. Les outils client effectuent la substitution variable avant que la commande soit soumise à SQL Server.
@Rick, si vous êtes heureux avec Dynamic SQL, pourquoi pas seulement faire Set @sql = 'utiliser' + @dbname + '; ... Autre sql dynamique ...; '; code>?
Je serais plus strict avec UTILISATION (DBNAME) - Il substitue une variable directement sous forme de texte lorsqu'il est exécuté avec Real SQLCMD, sera donc via une erreur. Correctement Compatible avec SQLCMD MODE CODE> et
SQLCMD.EXE CODE> est: Utilisez [$ (dbname)]
Aussi +1 pour si db_id () :)
Ceci peut être fait au moyen de SQL dynamique. Utilisez une variable pour stocker dbname et utilisez cette variable pour créer une chaîne SQL comme puis utilisez exécuté () code> ou
sp_executeql code> pour exécuter la chaîne SQL. P> p>
..La la base de données de modifications ne semble s'appliquer qu'à l'instruction SQL à l'intérieur du paramètre "CODE> EXEC CODE> / SP_EXECUTSQL CODE> Fonctions, pas toutes les instructions SQL suivantes
Juste pour ajouter la réponse de Martin Smith,
Si tel est ainsi, vous pouvez déployer votre création de table ou votre modification de table à plusieurs bases de données, vous pouvez séparer vos scripts de création de la base de données et d'objet, puis de les exécuter en séquence à l'aide d'un fichier BAT Utilisation du fichier d'entrée Alors votre fichier de commandes peut P> -I code>. Cela vous permet de modifier des bases de données entre les scripts de Master vers la nouvelle base de données. P>
sqlcmd -S server\Instance -E -d OneDatabase -i CreateTables.sql
sqlcmd -S server\Instance -E -d AnotherDatabase -i CreateTables.sql
Comment exécutez-vous le script?
En tant que nouvelle requête code> au niveau du serveur.