我有一個SQL Server 2005數據庫項目,並且希望將此模式部署到SQL Server更高版本上的現有數據庫。我遇到的問題是,在我希望部署的數據庫上啓用更改跟蹤功能,因此SSDT想要執行的第一件事是禁用CT。我得到下面的錯誤這就提出了一個問題:如何在Visual Studio數據庫項目(SSDT)上設置更改跟蹤
(43,1):SQL72014:.net SqlClient數據提供:消息22115,級別16, 狀態1,5號線更改跟蹤一個或啓用 數據庫'測試'中的更多表格。在 爲數據庫禁用它之前,禁用每個表上的更改跟蹤。使用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
在努力解決這個問題我已經創建了執行以下部署前的腳本:
/* 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;');
因此,基於數據庫版本更改跟蹤
設爲啓用數據庫和相關表假設它還沒有啓用。我從以前的帖子得到了這個想法:# ifdef type conditional compilation in T-SQL sql server 2008 2005
不幸的是,這仍然不工作,因爲SSDT是試圖在PreDeployment腳本執行之前禁用更改跟蹤。
是啊,這將是簡單的解決方案,但由於該項目是2005年,這一選項不會列出。理想情況下,我會將該項目切換到2012年並執行您的建議。不幸的是,項目需要保持2005年的可預見性。 – SQuirellingAlong