SESSION_CONTEXT(Transact-SQL)

适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

返回当前会话上下文中指定键的值。 该值是使用 sp_set_session_context 过程设置的。

Transact-SQL 语法约定

语法

SESSION_CONTEXT(N'key')

参数

key

要检索的值的键。 sysname

返回类型

sql_variant

返回值

与会话上下文中的指定键关联的值,或者 NULL 如果没有为该键设置任何值。

权限

任何用户都可以读取其会话的会话上下文。

备注

的 MARS 行为 SESSION_CONTEXT类似于 CONTEXT_INFO. 如果 MARS 批处理设置键值对,则新值不会在同一连接上在其他 MARS 批处理中返回,除非在设置新值完成的批处理之后启动。 如果多个 MARS 批处理在连接上处于活动状态,则无法将值设置为 read_only。 这可以防止争用条件和不确定的值 获胜

示例

下面的简单示例将键 user_id 的会话上下文值设置为 4,然后使用 SESSION_CONTEXT 函数检索值。

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

已知问题

問题 发现日期 状态 解决日期
在某些情况下, SESSION_CONTEXT 函数可能会出现访问冲突(AV)异常。 当会话重置以供重用时, SESSION_CONTEXT 当函数在并行执行计划中运行时,可能会遇到 AV 异常或错误的结果。

SQL Server 2019 (15.x) CU 14 中引入的修复程序解决了并行计划中出现错误的结果问题 SESSION_CONTEXT ,后来发现在某些情况下会导致 AV 异常。

若要缓解此问题,可以启用跟踪标志 11024 作为启动、全局或会话跟踪标志。 此跟踪标志强制 SESSION_CONTEXT 串行执行,防止其参与并行查询计划。

适用于: SQL Server 2019 (15.x) CU 14 及更高版本。
2022 年 1 月 具有解决方法