我試圖創建一個存儲過程來維持各種表指標。我能夠檢索索引的名字,但我無法使用該名稱與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