Emplacement des données SQL Server 2008 slqcmd

Dans SQL Server 2008 R2, j'ai défini les locations de Data et de Log sur F:\moved\ en cliquant avec le button droit sur le server dans SQL Server Management Studio et en les définissant.

Toutefois, lorsque je restaure une database à l'aide de sqlcmd , la database est sqlcmd dans E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA qui semble être l'location par défaut de SQL Server.

J'ai besoin que les bases de données soient toujours restaurées à F:\moved\ à des fins de stockage mais quand j'utilise ce qui suit dans mon script, j'ai parfois une erreur:

 RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, MOVE '$(database)' TO '$(datadir)$(database).mdf', MOVE '$(database)_log' TO '$(datadir)$(database).ldf' GO 

Erreur:

Context de database modifié à 'maître'.
Msg 3234, niveau 16, état 2, server SQL1, ligne 3
Le file logique 'userdb1' ne fait pas partie de la database 'userdb1'. Utilisez RESTORE FILELISTONLY pour répertorier les noms de files logiques.
Msg 3013, niveau 16, état 1, server SQL1, ligne 3
RESTORE DATABASE se termine anormalement.

Est-ce que sqlcmd peut être forcé de restaurer en F:\moved\ par défaut, sans avoir à le spécifier manuellement comme je l'ai vu ci-dessus pour éviter l'erreur?

Ne pouvez-vous pas simplement définir la variable datadir dans votre script sqlcmd ?

Quelque chose comme ça:

 :setvar datadir F:\moved\ RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, MOVE '$(database)' TO '$(datadir)$(database).mdf', MOVE '$(database)_log' TO '$(datadir)$(database).ldf' GO 

Avec cette ligne en place, sqlcmd doit toujours utiliser ce directory (au lieu de SQL Server par défaut)

Ou vous pouvez également définir cette valeur de variable à tout ce que vous voulez sur la command line en sqlcmd :

 C:\> sqlcmd -v datadir=F:\moved\ (script name)