Visual Studio 2012 には、データベース スキーマのソース管理として使用する SQL Server データベース プロジェクト (.sqlproj) があります。クールなことの 1 つは、コードをリリースするときにスキーマを更新するための SQL を生成することです。
dev、test、live の 3 つのプロファイルが設定されており、すべて正常に動作しています。
最近、ライブ データベースを「シンプル」リカバリから「フル」リカバリに変更しました。開発とテストへの次のデプロイを実行しようとするまで、すべてが素晴らしかったです。開発およびテストでリカバリ モードを Simple から Full に変更したくありません。変更する必要はありません。ただし、データベース プロジェクトを公開すると、それを設定する必要があります。
使用している発行構成に基づいて復旧モデルを設定したいと考えています。私は変数を作成し、それをプロジェクトの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 フォルダーにスクリプトを作成して、現在使用しているサーバーを特定し、それが開発またはテストの場合は復旧モデルをシンプルに戻すことです。これは最善の解決策とは思えません。
SQLCMD 変数を使用してデータベース プロパティを設定する方法はありますか?