繁体   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