批处理执行环境和 MARS
在 Microsoft SQL Server 2005 中,可以启用连接以支持多个活动的结果集 (MARS)。这些连接与默认的批处理执行环境相关联。
批处理执行环境由下列组件构成:
- SET 选项值(包括 ANSI_NULLS、DATE_FORMAT、LANGUAGE 和 TEXTSIZE)
- 安全上下文(批处理执行环境的用户或应用程序角色)
- 数据库上下文(环境的当前数据库)
- 执行状态函数(包括 @@ERROR、@@ROWCOUNT、@@FETCH_STATUS 和 @@IDENTITY)
- 顶级临时表
为特定连接开始执行的每个新批处理接收默认环境的一个副本。无论何时执行批处理,对执行环境所做的所有更改都只限于该特定的批处理。执行完成后,执行设置将复制到默认环境中。如果一个批处理发出多个要按顺序执行的命令,观察到的行为将与 SQL Server 早期版本中涉及客户端和服务器的连接所表现出来的行为相同。
在 SQL Server 的早期版本中,任何给定时间只能执行一个批处理。因此,由批处理对批处理环境所做的更改对所有后续批处理都可见。
对于存储过程和函数,批处理的默认环境也是连接的默认环境,但当执行完成后,更改不会复制回连接的默认批处理执行环境。
例如,假设两个批处理按照如下方式执行:
--First Batch
SET ARITHABORT ON
SET ANSI_WARNINGS ON
SELECT 1/0
GO
--Second Batch
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT 1/0
GO
还假设为具有默认执行环境、SET ARITHABORT 设置为 OFF,且 ANSI_WARNINGS 设置为 ON 的连接启用 MARS。
如果两个批处理在连接下并发提交,它们将使用连接的默认批处理环境设置开始执行。在执行过程中,它们的环境将受到限制,以确保一个批处理中的环境更改不会影响另一个批处理中的更改。当批处理执行完成后,它将得到的环境复制回连接的默认环境。连接得到的默认环境取决于最后完成执行的一个批处理。它将成为执行的下一个批处理使用的环境。
请参阅
其他资源
Using Multiple Active Result Sets (MARS)