SQL SERVER 会话 作用域概念 会话上下文

1. SQL SERVER 会话 作用域概念

 

一个作用域 就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

会话: 一个用户连接产生的所有上下文信息。一个查询分析器窗口就是一个会话

 

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。

SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。

 

http://topic.csdn.net/u/20100420/22/fa2a6bad-9135-41f8-bf9e-7978a41a1dd6.html

 

注释:关于批处理:sql 查询分析器里 go语句以前的SQL语句应该是一个批处理

 

2. 会话上下文信息

会话上下文信息的主要用途是设置一个能够在同一会话的多个批处理之间保持持久性的值。下列示例显示了如何设置一个能够在运行多个批处理之后引用的值。

 

会话上下文信息使应用程序最多能够设置 128 字节的二进制值,这些二进制值可由在同一会话上运行的多个批处理、存储过程、触发器或用户定义函数引用。可以使用 SET CONTEXT_INFO 语句设置会话上下文值,并使用下列方法之一检索该值:

 

2.1 执行 SET CONTEXT_INFO 之后,可以立即从下列源中获取新值:

(1)CONTEXT_INFO 函数。

SELECT CONTEXT_INFO() AS MyCtxInfo;

 

(2)sys.dm_exec_requests 中的 context_info 列

SELECT context_info AS MyCtxInfo

FROM sys.dm_exec_requests

WHERE session_id = @@SPID

   AND request_id = CURRENT_REQUEST_ID();

 

(3) sys.sysprocesses 兼容视图。

 

   SELECT context_info AS MyCtxInfo

FROM sys.sysprocesses

WHERE spid = @@SPID;

 

2.2新值不会传播到 sys.dm_exec_sessions 视图,直到包含 SET CONTEXT_INFO 语句的批处理运行完毕。完成该批处理后,新值将被放置在与当前会话关联的行中。

(4) sys.dm_exec_sessions 动态管理视图

SELECT context_info AS MyCtxInfo

FROM sys.dm_exec_sessions

WHERE session_id = @@SPID;

 

-- Set a context value before the batch starts.

SET CONTEXT_INFO 0x9999

GO

-- Set a new context value in the batch.

SET CONTEXT_INFO 0x8888

 

-- Shows the new value available in the

-- sys.dm_exec_requests view while still in the batch.

SELECT context_info as RequestCtxInfoInBatch

FROM sys.dm_exec_requests

WHERE session_id = @@SPID

   AND request_id = CURRENT_REQUEST_ID();

 

-- Shows the new value available from the

-- CONTEXT_INFO function while still in the batch.

SELECT CONTEXT_INFO() AS FuncCtxInfoInBatch;

 

-- Shows that the sys.dm_exec_sessions view still

-- returns the old value in the batch.

SELECT context_info AS SessCtxInfoInBatch

FROM sys.dm_exec_sessions

WHERE session_id = @@SPID;

 

-- Shows the new value available in the

-- sys.sysprocesses view while still in the batch.

SELECT context_info AS ProcsCtxInfoInBatch

FROM sys.sysprocesses

WHERE spid = @@SPID;

 

-- End the batch.

GO

 

-- Shows that the sys.dm_exec_sessions view now

-- returns the new value.

SELECT context_info AS SessCtxInfoAfterBatch

FROM sys.dm_exec_sessions

WHERE session_id = @@SPID;

你可能感兴趣的:(SQL Server)