我正在使用VSTS数据库版GDR版本9.1.31024.02
我有一个项目,我们将在客户添加到系统时动态创建具有相同架构的多个数据库。这是每个客户一个DB。我以为我应该能够使用部署脚本来执行此操作。不幸的是,我总是得到CREATE DATABASE语句中指定的完整文件名。例如:
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [targetDBName], FILENAME = N'$(DefaultDataPath)targetDBName.mdf')
LOG ON (NAME = [targetDBName_log], FILENAME = N'$(DefaultDataPath)targetDBName_log.ldf')
GO
我期待更像这样的东西
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [targetDBName], FILENAME = N'$(DefaultDataPath)$(DatabaseName).mdf')
LOG ON (NAME = [targetDBName_log], FILENAME = N'$(DefaultDataPath)$(DatabaseName)_log.ldf')
GO
甚至
CREATE DATABASE [$(DatabaseName)]
我不打算在持续的基础上运行它,所以我想尽可能简单地为下一个人做。项目属性中有很多可供选择的选项,但我不能按照我喜欢的方式工作。
任何人都知道如何设置它?
答案 0 :(得分:4)
迟到总比没有好,我知道如何从第二个例子中获取$(DefaultDataPath)$(DatabaseName)
文件名。
您在第一个代码段中显示的SQL表明您没有用于在VSTS:DB项目中创建数据库文件的脚本,可能是故意将它们排除在您已完成的任何架构比较之外。我发现它有点反直觉,但解决方案是让VSTS:DB脚本在开发环境中使用MDF和LDF,然后编辑这些脚本以使用SQLCMD变量。
在您的数据库项目中,转到文件夹架构对象>数据库级对象>存储>文件。在那里,添加这两个文件:
<强> Database.sqlfile.sql 强>
ALTER DATABASE [$(DatabaseName)]
ADD FILE (NAME = [$(DatabaseName)],
FILENAME = '$(DefaultDataPath)$(DatabaseName).mdf',
SIZE = 2304 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
TO FILEGROUP [PRIMARY];
<强> Database_log.sqlfile.sql 强>
ALTER DATABASE [$(DatabaseName)]
ADD LOG FILE (NAME = [$(DatabaseName)_log],
FILENAME = '$(DefaultDataPath)$(DatabaseName)_log.ldf',
SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %);
VSTS:DB或VSDBCMD.exe生成的完整数据库创建脚本现在将使用SQLCMD变量来命名MDF和LDF文件,允许您在命令行或MSBuild中指定它们。
答案 1 :(得分:1)
我们使用模板数据库执行此操作,我们在新客户联机时进行备份,复制和还原。我们不使用脚本创建任何模式,而是使用实时空数据库。
答案 2 :(得分:0)