Sql-Server

如何從使用 SSDT 14.06 在 VS 2015 中創建的部署腳本中刪除 Alter、Drop、Create SQL

  • August 29, 2019

我需要為我的 SQL 項目刪除以下自動生成的部署腳本。我正在使用帶有 SSDT 14.06 的 VS 2015。這是否可以在 Drop 選項卡下的 Advanced Deployment 設置中設置?這適用於現有的數據庫部署。

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)];

我在屬性中的部署選項中未選中以下項目:

– 部署數據庫屬性

– 始終重新創建數據庫

– 如果可能發生數據失去,阻止增量部署

– 在目標中而不是項目中刪除對象

– 不要使用 ALTER ASSEMBLY 語句來更新 CLR 類型

我只見過在兩種情況下編寫腳本的程式碼:

當選中“始終重新創建數據庫”高級發布選項時。

該選項可以通過多種方式設置,具體取決於您的部署過程的工作方式。

在使用者界面中,當您進行一次性發布或保存可重複使用的“.publish.xml”文件時:

發佈設置 UI 的螢幕截圖

在不使用 UI 的情況下,您可以在發布文件 XML 中看到:

<CreateNewDatabase>True</CreateNewDatabase>

請注意,預設值為“False”,因此該元素的缺失也意味著 false

您還可以將其作為命令行參數傳遞給sqlpackage.exe

/p: CreateNewDatabase=True

當 TargetDatabase 不存在時

如果目標數據庫不存在,則出於安全原因將其添加到腳本中,以確保它不會在創建新數據庫時失敗。

您需要仔細檢查發布 XML 中的這些屬性是否指向存在的有效數據庫:

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

它在 UI 中:

目標數據庫和連接選項的螢幕截圖


如果您可以分享有關如何生成發布腳本的更多詳細資訊(您所做的分步操作,例如右鍵點擊 Visual Studio 中的 SSDT 項目、發布等),我們可以幫助追踪顯示的原因為你準備。

引用自:https://dba.stackexchange.com/questions/246439