【发布时间】:2014-06-13 01:24:37
【问题描述】:
我们在 Visual Studio 2012 中有一个 SQL Server 数据库项目 (.sqlproj),我们将其用作数据库架构的源代码控制。它所做的一件很酷的事情是在我们发布代码时生成 SQL 来更新架构。
我们设置了 3 个配置文件 - 开发、测试、实时 - 一切正常。
最近我们将实时数据库从“简单”恢复更改为“完全”恢复。在我们尝试运行下一个部署以进行开发和测试之前,一切都很好。我们不想在开发和测试时将恢复模式从简单更改为完全 - 我们不需要更改它。但是,当我们发布数据库项目时,它现在想要设置它。
我想根据我使用的发布配置设置恢复模式。我已经尝试创建一个变量并在项目 xml 中分配它:
<Recovery>$(RecoveryModel)</Recovery>
但它仍然尝试在部署脚本中将其设置为“完整”:
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar DefaultLogPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar RecoveryModel "Simple"
GO
:on error exit
GO
/*
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported.
To re-enable the script after enabling SQLCMD mode, execute the following:
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
SET NOEXEC ON;
END
GO
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET RECOVERY FULL
WITH ROLLBACK IMMEDIATE;
END
我目前的工作是在 Post-Deployment 文件夹中创建一个脚本来确定我在哪个服务器上,然后将恢复模式设置回简单(如果它是开发或测试)。这似乎不是最好的解决方案。
有没有办法使用 SQLCMD 变量设置数据库属性?
【问题讨论】:
-
我知道这篇文章已经有好几年了,但我们遇到了同样的问题。我一直在采取与 Greg 相同的方法。对于我们的非生产环境,将恢复模式设置回简单。 Greg 或任何人——请告诉我你找到了替代解决方案! :)
-
@Shoeless 我还没有解决办法
标签: visual-studio-2012 sqlproj