SQL项目动态设置恢复模型

Gre*_*reg 8 visual-studio-2012 sqlproj

我们在Visual Studio 2012中有一个SQL Server数据库项目(.sqlproj),我们将其用作数据库模式的源代码控制.它所做的一件很酷的事情是生成SQL以在我们发布代码时更新架构.

我们有3个配置文件设置 - 开发,测试,现场 - 这一切都正常.

最近我们将实时数据库从"简单"恢复更改为"完全"恢复.在我们尝试将下一个部署运行到开发和测试之前,一切都很棒.我们不希望在开发和测试时将恢复模式从简单更改为完全 - 我们无需更改它.但是,当我们发布数据库项目时,它现在想要设置它.

我想根据我使用的发布配置设置恢复模型.我已经尝试创建一个变量并在项目xml中分配它:

<Recovery>$(RecoveryModel)</Recovery>
Run Code Online (Sandbox Code Playgroud)

但它仍尝试在部署脚本中将其设置为"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
Run Code Online (Sandbox Code Playgroud)

我目前的工作是在Post-Deployment文件夹中创建一个脚本来计算我所在的服务器,然后将恢复模型设置回简单(如果它是dev或test).这似乎不是最好的解决方案.

有没有办法用SQLCMD变量设置数据库属性?

小智 1

您可以转到 Visual Studio 中的项目设置。单击数据库设置 > 操作并将恢复模式更改为 SIMPLE。

  • 这会改变它,但我想根据变量动态地改变它。我们的开发环境很简单,但生产环境已满,我们希望一个项目能够同时部署这两个环境 (4认同)