目前尚无明确的方法来执行此操作,但这不是永久性的方案(仍不支持DBCC命令,但可以在Query Store上阅读)。即使架构更改命中率是可以接受的,也可能不是您想要的,因为它将使与基础对象相关的所有计划无效,而不仅仅是无效的计划。
不为此而努力,但是构建动态SQL对多个表执行相同的操作非常容易:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'ALTER TABLE '
+ QUOTENAME(SCHEMA_NAME([schema_id]))
+ '.' + QUOTENAME(name) + ' ADD fake_column INT NULL;
ALTER TABLE '
+ QUOTENAME(SCHEMA_NAME([schema_id]))
+ '.' + QUOTENAME(name) + ' DROP COLUMN fake_column;'
FROM sys.tables
--WHERE name IN, LIKE, etc.
PRINT @sql;
-- if the command > 8K, you can see the second chunk e.g.
PRINT SUBSTRING(@sql, 8001, 8000);
--EXEC sys.sp_executesql @sql;
(我写了一个有关“动态SQL长度”问题的提示 ...)