gpt4 book ai didi

sql-server - Visual Studio 2010 数据库项目中的条件文件组文件脚本

转载 作者:行者123 更新时间:2023-12-03 00:57:22 26 4
gpt4 key购买 nike

我有一个 Visual Studio 2010 数据库项目。在项目内部,我添加了两个存储 -> 文件组文件脚本:一个用于我的主数据文件 (.mdf),另一个用于我的日志文件 (.ldf)。这将在未来得到扩展。

enter image description here

现在,这两个文件的构建操作都设置为构建

每个文件的内容都很简单。我真正创建它们的唯一原因是完全控制它们的文件名。

Primary.sql:

ALTER DATABASE [$(DatabaseName)]
ADD FILE
(
NAME = [Primary],
FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix).mdf'
);

Log.sql:

ALTER DATABASE [$(DatabaseName)]
ADD LOG FILE
(
NAME = [Log],
FILENAME = '$(DefaultLogPath)$(DefaultFilePrefix)_Log.ldf'
);

当我发布数据项目以创建新数据库时,在幕后会呈现以下 TSQL/SQLCMD。这正是我想要的:

PRINT N'Creating $(DatabaseName)...'
GO
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [Primary], FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix).mdf')
LOG ON (NAME = [Log], FILENAME = '$(DefaultLogPath)$(DefaultFilePrefix)_Log.ldf') COLLATE SQL_Latin1_General_CP1_CI_AS
GO

但是,当我发布对现有数据库的更改(例如添加一个新表)时,会呈现以下 TSQL/SQLCMD:

PRINT N'Creating [Primary]...';
GO
ALTER DATABASE [$(DatabaseName)]
ADD FILE (NAME = [Primary], FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix).mdf') TO FILEGROUP [PRIMARY];
GO
PRINT N'Creating [Log]...';
GO
ALTER DATABASE [$(DatabaseName)]
ADD LOG FILE (NAME = [Log], FILENAME = '$(DefaultLogPath)$(DefaultFilePrefix)_Log.ldf');

这不是我想要的,因为 .mdf 文件和 .ldf 文件已经存在。如何修改我的存储脚本,以便它们在两种情况下都能很好地发挥作用:创建新数据库和更新现有数据库??

有什么想法吗?

更新8/18

我想我可以简单地将存储脚本包装在 IF/EXISTS 类型检查中。如果该文件已存在,则不执行任何操作。这似乎不起作用。它实际上阻止了解决方案的构建:

所以类似:

IF(EXISTS(SELECT TOP(1) 1 FROM sys.master_files as mf WHERE DB_NAME(mf.[database_id]) = [$(DatabaseName)] AND name = '[Primary]'))
BEGIN
ALTER DATABASE [$(DatabaseName)]
ADD FILE
(
...
);
END

产生以下编译器错误:

Error   200 SQL70001: This statement is not recognized in this context.

这些脚本在幕后处理的方式(新数据库与更新)让我认为它们不能是有条件的。

最佳答案

创建1个sql文件,将构建操作设置为PreDeploy

enter image description here

并将您的脚本添加到此文件中:

IF(EXISTS(SELECT TOP(1) 1 FROM sys.master_files as mf WHERE DB_NAME(mf.[database_id]) = '[$(DatabaseName)]' AND name = '[Primary]'))
BEGIN

ALTER DATABASE [$(DatabaseName)]
ADD FILE
(
NAME = [Primary],
FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix).mdf'
);

ALTER DATABASE [$(DatabaseName)]
ADD LOG FILE
(
NAME = [Log],
FILENAME = '$(DefaultLogPath)$(DefaultFilePrefix)_Log.ldf'
);

END

此文件将在每次部署时执行并检查数据库是否存在。但是您只有一个 PreDeploy 文件,因此,任何 srcips 都应该添加到该文件中,但这不是一个大问题

关于sql-server - Visual Studio 2010 数据库项目中的条件文件组文件脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com