2009-09-10 6 views
1

Nous utilisons SQL et avons un fichier de script pour générer la base de données et les tables. J'essaye d'écrire un manuscrit générique qui exécutera sur toutes les machines de dev/prod Le nom de dossier que je donne est FILENAME = N'c: \ Program Files \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ DATA \ DBname .mdf 'Script d'installation de base de données générique

Cela fonctionne sur ma machine mais pas sur toutes les machines de développement puisque toutes ont un chemin différent pour SQL. Existe-t-il un moyen de rendre ce paramètre générique? Je veux que ce script soit exécuté sur toutes les machines sur lesquelles SQL Server est installé.

Répondre

1

Je suppose que le problème est que sur des machines différentes, vous avez des instances de SQL Server dans des dossiers différents. Vous pouvez vérifier dans Windows enregistrer ce qui est le nom du dossier de votre instance:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL 

entrée Exemple

Name - Data 
MSSQLSERVER - MSSQL.1 
SQL2k5 - MSSQL.2 

Et puis dans une autre branche, par exemple:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Setup 

vous pouvez trouver chemin vers le répertoire avec des fichiers de données.

0

Si vous avez besoin de différencier certaines parties de vos scripts en fonction de l'endroit où vous les exécutez, vous pouvez utiliser SQLCMD.

J'ai eu du succès avec cette approche dans le passé quand j'avais besoin d'effectuer une restauration de base de données et je savais que les chemins de données différaient entre les boîtes.

Quelque chose comme ce qui suit devrait fonctionner:

SQLCMD -SMyDatabaseServer 
     -Q "RESTORE DATABASE $(DatabaseName) FROM DISK = '$(BackupLocation)\$(DatabaseName).bak' WITH NORECOVERY, STATS=10, REPLACE;" 
     -v 
     DatabaseName = MyDatabase 
     BackupLocation = "C:\SomeLocation" 
     -d master 
     -u [User] 
     -p [Password] 

Il existe une version de requête en ligne. Si vous devez travailler avec des fichiers de script SQL, modifiez la section -Q "..." en -i yourFile.sql et copiez et collez la requête elle-même dans le fichier sql. SQLCMD prendra vos variables définies par le commutateur -v et remplacera leurs contreparties dans votre requête définie par -Q ou -i.

Pour une référence plus détaillée, voir: http://msdn.microsoft.com/en-us/library/ms180944.aspx.

Questions connexes