簡體   English   中英

如何在 Visual Studio 數據庫項目 (SSDT) 上設置更改跟蹤

[英]How to set change tracking on a Visual Studio database project (SSDT)

我有一個 SQL Server 2005 DB 項目,我希望在 SQL Server 更高版本上的現有數據庫上部署架構。 我遇到的問題是我希望部署到的數據庫上啟用了更改跟蹤,因此 SSDT 要做的第一件事就是禁用 CT。 這帶來了一個問題,因為我收到以下錯誤:

(43,1): SQL72014: .Net SqlClient Data Provider: Msg 22115, Level 16, State 1, Line 5 對數據庫“Test”中的一個或多個表啟用更改跟蹤。 在為數據庫禁用更改跟蹤之前禁用每個表的更改跟蹤。 使用 sys.change_tracking_tables 目錄視圖獲取啟用更改跟蹤的表的列表。 (39,0): SQL72045: 腳本執行錯誤。 執行的腳本:

 IF EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$(DatabaseName)') BEGIN ALTER DATABASE [$(DatabaseName)] SET CHANGE_TRACKING = OFF WITH ROLLBACK IMMEDIATE; END

為了解決這個問題,我創建了一個執行以下內容的 PreDeployment 腳本:

/* Run pre-deployment scripts to resolve issues */
IF(SELECT SUBSTRING(@@VERSION, 29,4)) = '11.0'

BEGIN

PRINT 'Enabling Change Tracking';

DECLARE @dbname VARCHAR(250)
SELECT @dbname = DB_NAME()

EXEC('
        IF NOT EXISTS(SELECT * FROM [master].[dbo].[sysdatabases] WHERE name = ''' + @dbname + ''')
        
        ALTER DATABASE ['+ @dbname +
        ']SET CHANGE_TRACKING = ON
        (CHANGE_RETENTION = 5 DAYS, AUTO_CLEANUP = ON);
');

EXEC('
IF NOT EXISTS(SELECT * FROM sys.change_tracking_tables ctt
          INNER JOIN sys.tables t ON t.object_id = ctt.object_id
          INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
          WHERE t.name = ''TableName'')
BEGIN
    ALTER TABLE [dbo].[TableName] ENABLE CHANGE_TRACKING;
END;');

因此,基於 DB Version Change Tracking 設置為在 DB 和相關表上啟用,假設它尚未啟用。我從以前的帖子中得到了這個想法: # ifdef type conditional compiler in T-SQL sql server 2008 2005

不幸的是,這仍然不起作用,因為 SSDT 試圖在執行 PreDeployment 腳本之前禁用更改跟蹤。

確保在您的數據庫項目中啟用了更改跟蹤。

打開數據庫項目的屬性 > 項目設置 > 數據庫設置... > 操作選項卡 > 檢查“更改跟蹤”選項

正如基思所說,如果你想啟用它。 如果您確實想禁用它,那么只需在進行比較之前運行您的腳本,這樣您就有一個預部署腳本,例如:

https://the.agilesql.club/Blog/Ed-Elliott/Pre-Compare-and-Pre-Deploy-Scripts-In-SSDT

如果您禁用它,那么這是一件非常簡單的事情。

其他選項是編寫自己的部署貢獻者並通過連接提出錯誤。

部署貢獻者:

https://the.agilesql.club/blog/Ed-Elliott/2015/09/23/Inside-A-SSDT-Deployment-Contributor

https://github.com/DacFxDeploymentContributors/Contributors

埃德

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM