我们在Visual Studio 2012中有一个SQL Server数据库项目(.sqlproj),我们将其用作数据库架构的源代码控制。它要做的很酷的事情之一就是在发布代码时生成SQL以更新架构。
我们有3个配置文件设置-开发,测试,实时-一切正常。
最近,我们将实时数据库从“简单”恢复更改为“完全”恢复。在我们尝试运行下一个部署以进行开发和测试之前,一切都很棒。我们不想在开发和测试时将恢复模式从“简单”更改为“完全”-无需更改它。但是,当我们发布数据库项目时,它现在想要设置它。
我想根据我使用的发布配置来设置恢复模型。我尝试创建一个变量并将其分配到项目xml中:
<Recovery>$(RecoveryModel)</Recovery>
但它仍然尝试在部署脚本中将其设置为“Full”:
: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文件夹中创建一个脚本,以计算出我在哪台服务器上,然后将恢复模型(如果是dev或test)设置为simple。这似乎不是最好的解决方案。
有没有一种方法可以使用SQLCMD变量设置数据库属性?
最佳答案
我知道这是一个古老的问题,但我认为我会建议这种解决方案。您为什么不能只运行Post Deployment脚本来设置恢复模式。
USE [MYDATABASE];
IF @@SERVERNAME= 'DEVSQLSERVER'
BEGIN;
ALTER DATABASE [MYDATABASE] SET RECOVERY SIMPLE ;
END;
关于visual-studio-2012 - SQL Project动态设置恢复模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24196379/