Visual Studio database edition est livré avec un outil, vsdbcmd.exe, qui devrait permettre à quelqu'un de déployer un fichier .dbschema (qui est généré par le projet de base de données lors de la construction) dans une base de données. Pour ce faire, il construit d'abord le script, puis l'exécute :
vsdbcmd.exe /a:Deploy /cs : "Data Source=(local);Integrated Security=True;Pooling=False" /dsp:Sql /dd /model :" \Database.dbschema " /p:TargetDatabase=TargetDB /manifest : " \Database.deploymanifest "
Je m'attendrais à ce qu'il puisse déployer le script sur un serveur de base de données différent sans problème. Cependant, le chemin d'accès complet au fichier .mdf est encodé dans le script, ainsi que d'autres références à la base de données d'origine. Soit il n'y a pas d'option pour contrôler cela, soit je ne la trouve pas.
Quelqu'un l'utilise-t-il ? Comment le déployez-vous ? Aurais-je dû utiliser un autre type de projet de base de données (je me souviens avoir eu le choix, il y a longtemps, entre "projet de base de données" et "projet de serveur", mais je ne sais pas si cela a de l'importance) ?
EDITAR
Je peux remplacer le fichier .sqlcmdvars sans problème, mais cela ne résout pas le problème. Voici un extrait du fichier .sql généré en utilisant une commande comme ci-dessus :
GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
Il y a donc la base de données cible "targetdb" qui est enregistrée correctement. Mais, quelques lignes plus loin :
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %)
où Original.mdf est le nom de la base de données originale (c'est-à-dire la base de données que nous déployons pendant le développement, et qui est définie dans les propriétés du projet de base de données). C'est là que le déploiement échoue, soit parce que le chemin exact peut être différent sur la machine cible, soit sur ma machine parce que cette base de données existe déjà.
Ces valeurs semblent simplement codées en dur dans le script généré.