4

我正在使用 VSTS 数据库版 GDR 版本 9.1.31024.02

我有一个项目,当客户被添加到系统中时,我们将在运行中创建具有相同架构的多个数据库。每个客户一个数据库。我想我应该能够使用部署脚本来做到这一点。不幸的是,我总是得到 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)]

我不会在持续的基础上运行它,所以我想让它尽可能简单,以供下一个人使用。项目属性中有很多部署选项,但我无法让它按照我想要的方式工作。

有人知道如何设置吗?

4

3 回答 3

4

迟到总比没有好,我知道如何$(DefaultDataPath)$(DatabaseName)从您的第二个示例中获取文件名。

您在第一个代码片段中显示的 SQL 表明您没有用于在 VSTS:DB 项目中创建数据库文件的脚本,可能是故意将它们从您所做的任何模式比较中排除。我发现它有点违反直觉,但解决方案是让 VSTS:DB 在您的开发环境中编写 MDF 和 LDF 脚本,然后编辑这些脚本以使用 SQLCMD 变量。

在您的数据库项目中,转到文件夹Schema Objects > Database Level Objects > Storage > Files。在那里,添加这两个文件:

数据库.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 中指定它们。

于 2009-11-06T21:48:20.857 回答
1

我们使用模板数据库执行此操作,当新客户上线时,我们会对其进行备份、复制和恢复。我们不使用脚本创建任何模式,而是使用实时的空数据库。

于 2009-01-21T02:54:37.770 回答
0

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

于 2008-12-08T23:39:33.833 回答