为什么必须使用quoted_identifier才能使用过滤索引?

时间:2017-07-11 21:09:09

标签: sql-server filtered-index quoted-identifier

这里有很多关于如何处理这个混乱的SO和文章的问题,但我的问题更为基础:为什么?带引号的标识符似乎是引擎如何解释查询的属性,而与内部数据无关。就索引和插入/更新查询而言,谁在乎呢?为什么这个设置很重要?

假设您允许插入/更新成功,并且在带有筛选索引的表中将quoted_identifier设置为OFF - 究竟会破坏什么?

1 个答案:

答案 0 :(得分:3)

错误消息包含一条线索:

"Verify that SET options are correct for use with 
indexed views and/or 
indexes on computed columns and/or 
filtered indexes and/or 
query notifications and/or
XML data type methods and/or 
spatial index operations."

所有这些功能都需要一组规范的SET选项。对于插入具有过滤索引的表,QUOTED_IDENTIFIERS可能会起作用,因为正如您所说,它只会影响查询文本的解析。但其中一个其他功能无法使用QUOTED_IDENTIFIERS关闭。

这可能与QUOTED_IDENTIFERS在查询解析中是如此奇怪的事实(并不建议将其关闭)这一事实一样平凡,在这些场景中支持它是不值得的。

*请参阅https://docs.microsoft.com/en-us/sql/t-sql/statements/set-quoted-identifier-transact-sql,它解释了会话设置的差异,它在顶级临时批处理中的行为,存储过程和嵌套批处理。