大型數據庫重新設計後,我需要刪除它的所有索引,並設置新的索引。
我發現很好的scrpipt獲取所有索引並刪除,但我有問題 - 我無法刪除由主鍵約束創建的索引。 (也許還有其他類型的指數我不能刪除)。如何檢查是否可以刪除SQL Server中的數據庫索引
我的問題是:如何更改下面的代碼以除去除主鍵或其他手動創建的索引之外的所有索引,我無法手動刪除。
DECLARE @indexName VARCHAR(128)
DECLARE @tableName VARCHAR(128)
DECLARE [indexes] CURSOR FOR
SELECT [sysindexes].[name] AS [Index], [sysobjects].[name] AS [Table]
FROM [sysindexes]
INNER JOIN [sysobjects] ON [sysindexes].[id] = [sysobjects].[id]
WHERE [sysindexes].[name] IS NOT NULL AND [sysobjects].[type] = 'U'
OPEN [indexes]
FETCH NEXT FROM [indexes] INTO @indexName, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('DROP INDEX [' + @indexName + '] ON [' + @tableName + ']')
FETCH NEXT FROM [indexes] INTO @indexName, @tableName
END
CLOSE [indexes]
DEALLOCATE [indexes]
這是一個很好的建議,使用該表,謝謝 - 但它運行由它生成的代碼是有風險的 - 它會從systables中刪除索引,併爲HEAP類型的索引返回null - 從我的示例中的代碼只返回索引定製表格 – 2011-04-05 13:23:45
如果您爲該語句添加了'AND object_ID> 255並且名稱不爲NULL',則會得到相同的結果;所有「系統級」表(id <255)被排除在外,就像堆(索引名稱爲NULL) – 2011-04-05 13:37:11
好的,謝謝 - 那會好很多。現在有我的索引和幾個像下面這樣的索引:「queue_clustered_index」 - 你知道它是什麼嗎? – 2011-04-05 13:48:01