spe*_*der 18 t-sql sql-server indexing sql-server-2008
我使用以下命令从我的数据库中选择了许多非聚集索引:
SELECT sys.objects.name tableName,
sys.indexes.name indexName
FROM sys.indexes
JOIN sys.objects ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.indexes.type_desc = 'NONCLUSTERED'
AND sys.objects.type_desc = 'USER_TABLE'
Run Code Online (Sandbox Code Playgroud)
我想在每个结果上运行以下命令:
ALTER INDEX indexName ON tableName DISABLE
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?有没有更好的办法?
编辑
我这样做是为了截断表,然后用"ALTER INDEX bla ON table REBUILD"重建.这需要自动化,因此丢弃和重建将是一个更高的维护活动,我宁愿避免.这是一个糟糕的计划吗?我需要一种以最小的开销清空表的方法.
Dan*_*lan 33
您可以将查询构建到select语句中,如下所示:
DECLARE @sql AS VARCHAR(MAX)='';
SELECT @sql = @sql +
'ALTER INDEX ' + sys.indexes.name + ' ON ' + sys.objects.name + ' DISABLE;' +CHAR(13)+CHAR(10)
FROM
sys.indexes
JOIN
sys.objects
ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.indexes.type_desc = 'NONCLUSTERED'
AND sys.objects.type_desc = 'USER_TABLE';
EXEC(@sql);
Run Code Online (Sandbox Code Playgroud)
字符13和图10是换行/回车符号,所以可以通过替换检查输出EXEC用PRINT,这将是更具有可读性.
| 归档时间: |
|
| 查看次数: |
21291 次 |
| 最近记录: |