2016-07-06 26 views
0

使用帶有索引顧問的SQL Azure,它會根據一些奇特的算法自動爲表生成索引。我們正試圖執行一些維護腳本,重建支離破碎的指標,但問題是,由Index Advisor生成的索引中他們具有的GUID所以查詢重建索引如下所示:使用名稱連字符重建索引

ALTER INDEX nci_wi_Table_C17CD092-869C-407C-8623-9F05C8D64E67 ON [dbo].[Table] REBUILD WITH (FILLFACTOR = 90, STATISTICS_NORECOMPUTE = OFF, ONLINE = ON) 

如果嘗試運行這個,你會得到這個錯誤:

Incorrect syntax near '-'. 

我試圖在[]和''中包裝索引名稱,但都不起作用。

任何人有任何想法如何執行ALTER INDEX查詢時,索引的名稱中有連字符?

+0

你試過['QUOTENAME'](https://msdn.microsoft.com/en-us/library/ms176114.aspx)嗎? –

回答

1

這必須是Azure 「功能」。使用方括號可以在預編譯中正常工作。

你試過完全不需要這樣的:

DECLARE @SQL VARCHAR(MAX) 

SELECT 
    @SQL = 'ALTER INDEX ' + QUOTENAME('nci_wi_Table_C17CD092-869C-407C-8623-9F05C8D64E67') + ' ON [dbo].[Testing] REBUILD' 

EXEC(@SQL) 

做不到這一點它可能的時間來只是重命名索引排除GUID。

+0

工作。謝謝! –

+0

好東西。但有多奇怪! –

0

這不是Azure SQL數據庫特定的。在[]中環繞索引名稱可以正常工作。請試試下面的例子:

CREATE TABLE [Table] (Col1 int, Col2 int); 
GO 

CREATE INDEX [nci_wi_Table_C17CD092-869C-407C-8623-9F05C8D64E67] ON [dbo].[Table] (Col1); 

GO 

ALTER INDEX [nci_wi_Table_C17CD092-869C-407C-8623-9F05C8D64E67] ON [dbo].[Table] REBUILD WITH (FILLFACTOR = 90, STATISTICS_NORECOMPUTE = OFF, ONLINE = ON) 

如果您在名稱連字符參考指標,你會得到「附近有語法錯誤‘ - ’」都與SQL Server(內部)和Azure的SQL數據庫。

相關問題