如果您有索引视图,为什么必须为整个数据库启用QUOTED_IDENTIFIER?

时间:2010-10-07 07:10:52

标签: sql-server tsql sql-server-2008

昨天我在MSSQL 2008 db中的视图上添加了一些索引。之后,似乎所有存储过程都需要在QUOTED_IDENTIFIER设置为ON的情况下运行,即使是那些不使用相关视图的存储过程。

为什么会这样?这是我可以在数据库上配置的东西,还是我必须更新所有存储过程以将QUOTED_IDENTIFIER设置为ON?我认为,对于不使用视图的存储过程,这是非常奇怪的。

1 个答案:

答案 0 :(得分:5)

这些存储过程是否与视图所基于的基表有关?引用Creating Indexed Views

  

创建聚簇索引后,   任何试图修改的连接   视图的基础数据也必须   具有相同的选项设置   创建索引。 SQL Server   生成错误并回滚任何错误   INSERT,UPDATE或DELETE语句   这将影响结果集   查看连接是否正在执行   声明没有正确的   选项设置。欲获得更多信息,   请参阅影响结果的SET选项。

当你想到它时,很明显 - 当你触摸这些基表时,你可能会更新视图的内容,因此你继承了与创建索引时相同的责任。 / p>

您可以将默认值设置为multiple levels

  • 任何应用程序都可以通过在连接到服务器后执行SET语句来显式覆盖任何默认设置。 SET语句会覆盖所有先前的设置,并可用于在应用程序运行时动态打开和关闭选项。选项设置仅适用于当前连接会话。

  • OLE DB和ODBC应用程序可以通过指定连接字符串中的选项设置来指定在连接时生效的选项设置。选项设置仅适用于当前连接会话。

  • 使用“控制面板”中的ODBC应用程序或ODBC SQLConfigDataSource函数为SQL Server ODBC数据源指定的SET选项。

  • 数据库的默认设置。您可以使用ALTER DATABASE或SQL Server Management Studio中的对象资源管理器指定这些值。

  • 服务器的默认设置。您可以使用SQL Server Management Studio中的sp_configure或Object Explorer来指定这些值,以设置名为user options的服务器配置选项。