【问题标题】:How to check if change tracking is enabled on a specific table如何检查是否在特定表上启用了更改跟踪
【发布时间】:2017-11-08 14:19:24
【问题描述】:

由于某种原因,我们的构建系统给了我一个错误,提示我已经在我想要启用它的表上启用了更改跟踪。

ALTER TABLE [dbo].[MyTable]
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = OFF) 

我进行了搜索,但找不到类似IF EXISTS 的内容,首先查看它是否已启用,如果未启用则运行 ALTER 命令。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我想我找到了:

    IF NOT EXISTS (SELECT 1 FROM sys.change_tracking_tables 
                   WHERE object_id = OBJECT_ID('dbo.CUSTOMER'))
    BEGIN
         ALTER TABLE dbo.CUSTOMER
         ENABLE CHANGE_TRACKING
         WITH (TRACK_COLUMNS_UPDATED = OFF)
    END
    

    https://www.mssqltips.com/sqlservertip/3316/how-to-enable-change-tracking-in-a-sql-server-database-project/

    【讨论】:

      【解决方案2】:

      第 1 步:在选中 [Results to text] 选项的情况下执行以下脚本 (Ctrl + T)

          IF CONVERT(INT, PARSENAME(CONVERT(NVARCHAR(128), SERVERPROPERTY('ProductVersion')), 4)) >= 10 -- 10 = SQL2008
      BEGIN
          EXEC sp_executesql N'SELECT * FROM sys.change_tracking_databases db WHERE db.database_id = DB_ID(); ' -- sys.change_tracking_databases is available in SQL2008+
          IF @@ROWCOUNT = 0
          BEGIN 
              RAISERROR('CHANGE TRACKING is not enabled at database level.', 16, 1);
              RETURN;
          END
      END
      

      然后下面的查询将打印所有未启用更改跟踪的表

      SELECT    --N'PRINT ''Enable CHANGE_TRACKING on ' + full_table_name + ''';'
               N'ALTER TABLE ' + full_table_name + N' ENABLE CHANGE_TRACKING' + CHAR(13) + CHAR(10) 
              --+ N'GO'
      FROM (
          SELECT  QUOTENAME(s.name) + '.' + QUOTENAME(t.name) AS full_table_name,
                  s.name AS schema_name, t.name AS table_name
          FROM    sys.key_constraints x
          JOIN    sys.tables t ON x.parent_object_id = t.object_id
          left JOIN   sys.change_tracking_tables
                  on t.object_id = sys.change_tracking_tables.object_id
          JOIN    sys.schemas s ON t.schema_id = s.schema_id 
          WHERE   x.[type] = 'PK' and sys.change_tracking_tables.object_id is null
      ) y
      ORDER BY schema_name, table_name
          enter code here
      

      【讨论】:

        猜你喜欢
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2011-12-07
        相关资源
        最近更新 更多