[英]Visual Studio SSDT Database project will not display schema node on restart
[英]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.