如何在VSTS DB Edition Deploy中自定义CREATE DATABASE语句?

时间:2008-12-03 01:10:54

标签: sql-server-2008 visual-studio-2008 deployment database-project

我正在使用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)]

我不打算在持续的基础上运行它,所以我想尽可能简单地为下一个人做。项目属性中有很多可供选择的选项,但我不能按照我喜欢的方式工作。

任何人都知道如何设置它?

3 个答案:

答案 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)

嗯,好吧,到目前为止最好的答案(鉴于压倒性的反应)是在事后编辑文件......仍在寻找