出于某种原因,我们的构建系统给出了一个错误,指出在我要启用它的表上已启用更改跟踪。
ALTER TABLE [dbo].[MyTable]
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = OFF)
我进行了搜索,但无法找到像IF EXISTS
这样的内容,先说明是否启用了它,如果未启用,则运行ALTER
命令。
答案 0 :(得分:2)
我想我找到了它:
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
答案 1 :(得分:2)
步骤1:执行以下脚本,并选择[结果为文本]选项(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