【问题标题】:SET OPTIONS....where are they stored设置选项....它们存储在哪里
【发布时间】:2010-11-19 03:17:45
【问题描述】:

快速问题...

SET OPTIONS 的值存储在数据库中的 SP、Func、触发器等的什么位置?如果它们与全局设置不同?

开启阿里萨博特
设置 CONCAT_NULL_YIELDS_NULL 开
设置 QUOTED_IDENTIFIER ON
设置 ANSI_NULLS
设置 ANSI_PADDING
设置 ANSI_WARNINGS
设置 NUMERIC_ROUNDABORT 关闭

我知道数据库的全局设置存储在 sys.databases 视图中。但是对于每个 Stored Proc 或其他对象呢?

使用 [SomeDB]
去吧

设置 ARITHABORT 关闭
设置 CONCAT_NULL_YIELDS_NULL 关闭
设置 QUOTED_IDENTIFIER 关闭
去吧

创建 usp_SampleProc
作为
开始
-- 执行一些操作
结束

我看到可以使用以下方法检索一对夫妇:

SELECT OBJECTPROPERTY(OBJECT_ID('Procedure_Name'), 'ExecIsQuotedIdentOn')
SELECT OBJECTPROPERTY(OBJECT_ID('Procedure_Name'), 'ExecIsAnsiNullsOn')

其余的在哪里......它们甚至是否为每个存储过程存储......?
谢谢,
_Ub

【问题讨论】:

    标签: sql-server sql-server-2005


    【解决方案1】:

    适用于过程的那些,例如ANSI_NULLSQUOTED_IDENTIFIERsys.sql_modules 中,它们由OBJECTPROPERTY 检索。

    那些适用于数据库并为每个数据库设置的内容可在sys.databases 中找到。

    适用于会话的那些可在sys.dm_exec_sessions 中找到。

    最终实际应用的内容取决于设置,并且覆盖和默认值的规则至少可以说是复杂的。一些客户端驱动程序自动设置选项开/关。不同的选项和不同的默认值取决于客户端(ODBC、OleDB、SNAC、SqlClient 等)。 generic rule 是:

    1. 数据库选项覆盖实例选项。
    2. SET 选项覆盖数据库选项。
    3. 提示会覆盖 SET 选项。

    【讨论】:

    • 感谢您的快速响应,但它只有 uses_quoted_identifier is_schema_bound uses_database_collat​​ion is_recompiled ...其余的呢。 _Ub
    • 对于特定过程,SET ARITHABORT ON SET ANSI_WARNINGS ON 怎么样。这两个是我比较关心的?
    • 在过程创建时仅捕获 QUOTED_IDENTIFER 和 ANSI_NULLS 设置。所有其他设置,将应用当前会话值。
    • 我同意。这是我目前的理解。但是我正在尝试获取有关在有多个冲突选项时如何应用 SET OPTIONS 的规则的更多信息。我想知道的是,如果我在存储的 Proc 中(以及在创建存储的 Proc 期间)指定 SET OPTIONS(如 SET NOCOUNT ON),它将覆盖来自客户端(JDBC)的 SET OPTIONS。
    • 基本上是一堆设置。会话具有当前状态(来自实例/数据库/显式 SET)。执行该过程时,会复制并推送会话状态,然后应用两个捕获的设置(QUOTED_IDENTIFIER 和 ANSI_NULLS)。 Wehn 诸如 SET NOCOUNT ON 之类的东西在过程中,它将在执行时生效。因此,它会更改过程执行范围的会话设置。当过程终止时,旧的会话设置会被弹回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多