【发布时间】:2013-03-23 14:07:24
【问题描述】:
我正在尝试创建一个过滤的非聚集索引。在 gui 中,我右键单击我想要索引的表的 Indexes 文件夹。添加应应用索引的列,然后单击过滤器页面添加此语句:WHERE eMail IS NOT NULL。单击确定,我会看到此错误:
索引“fix_Email”的创建失败。 (Microsoft.SqlServer.Smo)
关键字“WHERE”附近的语法不正确。
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。 (Microsoft SQL Server,错误:156)
这直接来自一本关于 SQL Server 2008 管理的书。我安装了 SQL 2012 express 来看看两者之间会有什么不同。之前的所有示例都有效,创建了聚集索引、非聚集索引和覆盖索引。这是本书或 SQL Server 2012 或 Express 版的问题吗?我尝试按照WHERE 语句末尾的错误消息的建议放置一个分号,但这没有任何作用。
我能够在查询窗口中使用此代码创建索引:
CREATE NONCLUSTERED INDEX fix_Prices
ON dbo.Customers (eMail)
WHERE eMail IS NOT NULL;
为什么这工作但不使用 Management Studio gui?
【问题讨论】:
-
发布您正在尝试的确切代码。
-
这是使用管理工作室的确切代码和方法,我正在对此进行更新,我能够使用直接 sql 语句创建它。
-
嘿@marc_s,你为什么把错误信息改成斜体?我发现以这种格式阅读更难,而不是更容易。我想你会发现相反的情况?
-
@AaronBertrand:这正是我看到很多版主不久前使用的风格,我采用了它。不一定要那样 - 我只是想确保错误在问题的其余部分中明显突出
-
@marc_s 啊,好吧,你不必把它改回来,只是好奇你是否真的发现它更容易阅读。至于脱颖而出,在移动设备上它仍然是白色背景,但在桌面上它是像代码一样的颜色,但没有固定宽度的字体。
标签: sql sql-server sql-server-2012-express