当前位置:编程学习 > asp >>

如何设置会话上下文信息?

答案:

Microsoft SQL Server 2000的会话上下文信息使应用程序得以设置二进制值,以便在同一会话或连接上运行的多个批处理、存储过程、触发器或用户定义函数中加以引用,但我在使用中感到不是很顺利,请问还应注意一些什么问题吗?

Microsoft SQL Server 2000引入了编程能力,在会话上下文信息中,我们可使用新的 SET CONTEXT_INFO 语句设置会话上下文,然后从 master.dbo.sysprocesses 表的新 context_info 列中检索上下文字符串。SET CONTEXT_INFO 语句支持:
    1、最多 128 字节的常量,可以是二进制或是可隐性转换为二进制的数据类型。
    2、varbinary(128) 或 binary(128) 变量的名称。
    注意,不能在用户定义函数中指定 SET CONTEXT_INFO。因为用来存储信息的 sysprocesses 表不允许空值,所以不能给 SET CONTEXT_INFO 提供空值。

    我们要获得当前连接的当前会话上下文,可从 SQL Server 进程 ID (SPID) 与连接 SPID 相等的 master.dbo.sysprocesses 行中选择 context_info 列,当前连接的 SPID 由 @@SPID 函数返回:
SELECT context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID

    如果我们还没有对当前连接执行 SET CONTEXT_INFO, context_info 列中的值将会初始化为 128 字节的二进制零;如果已执行了 SET CONTEXT_INFO,context_info 列[varbinary(128) 列]将包含由当前连接最后执行的 SET CONTEXT_INFO 设置的值。
下面看看具体的会话上下文信息示例:
SET CONTEXT_INFO 0x1256698456
------ 开始设置上下文信息------
GO
sp_who
GO
USE Northwind
GO
SELECT CustomerID
FROM Customers
WHERE City = 'London'
GO
SELECT context_info
------ 在选择上下文信息之前设置批处理------
FROM master.dbo.sysprocesses
WHERE spid = @@spid
GO

    注意以上的SET CONTEXT_INFO 不支持引用常量或变量名以外的表达式,象函数什么的。如果需要将上下文信息设置为函数调用结果,则须先在 binary 或 varbinary 变量中放置函数调用结果才可:
    DECLARE @BinVar varbinary(128)
SET @BinVar = CAST( REPLICATE( 0x20, 128 ) AS varbinary(128) )

上一个:如何实现“向好友推荐”功能?
下一个:如何让用户也能修改密码?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,