在名称中使用连字符重建索引

时间:2016-07-06 02:54:19

标签: tsql azure-sql-database

将SQL Azure与Index Advisor一起使用,它会根据某些奇特的算法自动为表生成索引。我们正在尝试实现一些重建碎片索引的维护脚本,但问题是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查询?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

这不是特定于Azure SQL DB的。在[]中包装索引名称可以正常工作。请尝试以下示例:

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数据库都会出现“语法不正确” - “”。