sql-server - 如果您有索引 View ,为什么必须对整个数据库启用 QUOTED_IDENTIFIER?

标签 sql-server t-sql sql-server-2008

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

为什么会这样呢?这是我可以在数据库上配置的东西,还是必须更新所有存储过程才能将 QUOTED_IDENTIFIER 设置为 ON?我认为对于不使用 View 的存储过程来说这是必需的,这很奇怪。

最佳答案

这些存储过程是否与 View 所基于的基表相关?引用Creating Indexed Views :

After the clustered index is created, any connection that tries to modify the base data for the view must also have the same option settings required to create the index. SQL Server generates an error and rolls back any INSERT, UPDATE, or DELETE statement that will affect the result set of the view if the connection executing the statement does not have the correct option settings. For more information, see SET Options That Affect Results.

很明显,当您考虑这一点时 - 每当您触摸这些基表时,您都可能会更新 View 的内容,因此您继承了与创建索引时相同的职责。

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

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

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

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

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

  • 服务器的默认设置。您可以通过使用 SQL Server Management Studio 中的 sp_configure 或对象资源管理器来设置名为用户选项的服务器配置选项来指定这些值。

关于sql-server - 如果您有索引 View ,为什么必须对整个数据库启用 QUOTED_IDENTIFIER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3879412/

相关文章:

sql - 选择 WHERE 日期 = 天

sql-server - 我可以删除 SQL Server 安装引导日志文件吗?是否有一个设置可以自动管理这些文件?

sql - 使用 IN 列表进行外部连接?

sql - 从仅前两列不同的表中选择数据

SQL - 如果某个值等于某个数字,则行数应等于该某个数字

sql-server-2008 - 使用 sql server 空间获取点半径内点的最有效方法

java - 无法连接到 Java 应用程序中的 SQLServer 数据库

sql-server - 在两个日期之间计数

sql - 如何获取 SQL Server 表列的约束

sql - 令人困惑的 SQL。简短但奇怪