我试图创建一个存储过程来维持各种表指标。我能够检索索引的名字,但我无法使用该名称与ALTER INDEX语句:因人而异指数名称与ALTER INDEX
DECLARE reorgCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT a.index_id, b.name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(@MyDB), OBJECT_ID(@tableName), NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
WHERE 5 < avg_fragmentation_in_percent AND avg_fragmentation_in_percent <= 30
OPEN reorgCursor
FETCH NEXT FROM reorgCursor
INTO @indexId, @indexName, @fragPct
WHILE @@FETCH_STATUS = 0
BEGIN
ALTER INDEX @indexName ON @tableName
REORGANIZE
FETCH NEXT FROM reorgCursor
INTO @indexId, @indexName, @fragPct
END
CLOSE reorgCursor
DEALLOCATE reorgCursor
的问题是,我得到的错误:
Incorrect syntax near '@indexName'. Expecting ALL, ID, or QUOTED_ID.
我怎么可能参数指标名称?
EXEC( 'ALTER INDEX' + @indexName + 'ON' + @tablename) – artm
你为什么要重新发明轮子? http://ola.hallengren.com –
感谢大家的答案,并指出我可以使用的一些资源。 – Russ