如何在Visual Studio数据库项目(SSDT)上设置更改跟踪

时间:2015-12-02 07:51:58

标签: sql-server sql-server-data-tools change-tracking

我有一个SQL Server 2005数据库项目,我希望通过SQL Server更高版本上的现有数据库部署Schema。我遇到的问题是在我希望部署到的数据库上启用了更改跟踪,因此SSDT要做的第一件事就是禁用CT。当我收到以下错误时,这会产生问题:

  

(434):SQL72014:.Net SqlClient数据提供者:Msg 22115,Level 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

为了解决这个问题,我创建了一个执行以下命令的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;');

所以基于数据库版本更改跟踪设置为在数据库和相关表上启用,假设它尚未启用。我从之前的帖子中得到了这个想法:# ifdef type conditional compilation in T-SQL sql server 2008 2005

不幸的是,由于SSDT在执行PreDeployment脚本之前尝试禁用更改跟踪,因此仍无法正常工作。

2 个答案:

答案 0 :(得分:4)

确保在数据库项目中启用了更改跟踪。

项目属性>项目设置>数据库设置...>操作选项卡>检查“更改跟踪”选项

答案 1 :(得分:0)

正如基思所说,如果你想要它启用它。如果你想要禁用它,那么只需在进行比较之前运行你的脚本,这样你就有了一个预部署之前的脚本,如:

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

如果你要禁用它,那么这是一件很简单的事情。

其他选项是编写您自己的部署贡献者并通过connect提出错误。

部署参与者:

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

https://github.com/DacFxDeploymentContributors/Contributors