web-dev-qa-db-ja.com

SSDT 14.06を使用してVS 2015で作成されたデプロイメントスクリプトからAlter、Drop、Create SQLを削除する方法

以下のSQLプロジェクト用に自動生成されたデプロイメントスクリプトを削除する必要があります。 SSDT 14.06でVS 2015を使用しています。これは、[ドロップ]タブの[詳細展開]設定で設定できるものですか。これは、既存のデータベース展開用です。

IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) 
BEGIN
    ALTER DATABASE [$(DatabaseName)]
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [$(DatabaseName)];
END

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

プロパティの展開オプションに次の項目がすべて含まれていますチェックされていない

-データベースプロパティのデプロイ
-常にデータベースを再作成します
-データ損失が発生する可能性がある場合、増分展開をブロックします
-ターゲットではなくオブジェクトではないDROPオブジェクト
-CLRタイプの更新にALTER Assemblyステートメントを使用しないでください

2
Jason

私は、コードが2つの状況でスクリプト化されることを見たことがあります。

「常にデータベースを再作成する」高度な公開オプションがチェックされている場合。

このオプションは、展開プロセスの動作方法に応じて、複数の方法で設定できます。

これは、1回限りのパブリッシュを実行するか、再利用可能な「.publish.xml」ファイルを保存するときのユーザーインターフェースにあります。

screenshot of publish settings UI

UIを使用しない場合、これはパブリッシュファイルXMLで確認できます。

<CreateNewDatabase>True</CreateNewDatabase>

デフォルトは「False」なので、要素がないこともfalseを意味することに注意してください

これをコマンドラインパラメータとしてsqlpackage.exeに渡すこともできます。

/p: CreateNewDatabase=True

TargetDatabaseが存在しない場合

ターゲットデータベースが存在しない場合は、安全性を考慮してスクリプトに追加され、新しいデータベースの作成に失敗しないようになっています。

公開XMLのこれらのプロパティが、存在する有効なデータベースを指していることを再確認する必要があります。

<TargetDatabaseName>YourDatabaseName</TargetDatabaseName>
<TargetConnectionString>Data Source=...etc...</TargetConnectionString>

そして、これはUIにあります:

Screenshot of target database and connection options


howの詳細を共有できる場合は、公開スクリプトを生成します(たとえば、SSDTを右クリックするなど、実行する手順Visual Studioのプロジェクト、発行など)、それが表示されている理由を追跡できます。

2
Josh Darnell