有时候我们需要对某些表进行批量更新,而帮助数据库在正常使用中顺利运行的索引就成为了一个障碍。因此,我们禁用该表上的所有索引,执行更新,然后重新启用它们。要禁用表“x”上的所有索引,我们运行 t-sql 语句:
ALTER INDEX ALL ON x DISABLE
Run Code Online (Sandbox Code Playgroud)
这会导致一大堆警告,例如:
警告:由于禁用表上的聚集索引,表“x”上的索引“y”被禁用。
这很公平,但我们知道我们在做什么,所以这些警告只是噪音。
是否可以添加类似于 DBCC 命令上的 NO_INFOMSGS 参数的内容来抑制这些不需要的警告?
不,您无法禁用此警告。
但如果您愿意,您可以构建一个动态 SQL 字符串,按顺序禁用索引,最后是聚集索引。
DECLARE @sql nvarchar(max);
SELECT @sql = STRING_AGG(
'ALTER INDEX ' + i.name + ' ON t DISABLE;',
'
' ) WITHIN GROUP (ORDER BY i.index_id DESC)
FROM sys.indexes i
JOIN sys.tables t ON t.object_id = i.object_id
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE t.name = 't'
AND s.name = 'dbo';
PRINT @sql;
EXEC sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
这显然要复杂得多,而且可能不值得。
归档时间: |
|
查看次数: |
502 次 |
最近记录: |