Sql server 将内容打包为SQL Server二进制数据类型

Sql server 将内容打包为SQL Server二进制数据类型,sql-server,Sql Server,在SQL Server中使用二进制数据类型可以使我的生活更轻松吗 我最近发现了这个漂亮的功能 DECLARE @p0 varbinary(128) SET @p0 = --? SET CONTEXT_INFO @p0 如何以合理有效的方式在这个二进制插槽中存储有意义的数据?然后以合理的方式访问数据 SELECT ? = context_info FROM sys.dm_exec_sessions WHERE session_id = @@SPID 更新:正如gbn所指出的那样 SELECT

在SQL Server中使用二进制数据类型可以使我的生活更轻松吗

我最近发现了这个漂亮的功能

DECLARE @p0 varbinary(128)
SET @p0 = --?
SET CONTEXT_INFO @p0
如何以合理有效的方式在这个二进制插槽中存储有意义的数据?然后以合理的方式访问数据

SELECT ? = context_info
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID
更新:正如gbn所指出的那样

SELECT ? = CONTEXT_INFO()
更有用的方法是依赖CONTEXT_INFO()返回某个上下文表的行ID。说:

SELECT * 
FROM ContextTable 
WHERE RowID = CONTEXT_INFO()

这将允许我查询上下文信息。

这对于将数据传递到触发器非常有用,例如,将网站中的用户名传递到审核触发器

我还将使用()读取数据(对于SQLServer2005和更高版本)


一个问题是:它开始为NULL,但在使用后不能将NULL重新分配给它。您必须使用0x00。

是的,这就是我的目标,但二进制文件并不是一种真正有用的类型,是吗?您可以使用@SPID来维护一个状态为的表(您可以查询该行,这很实用)。顺便说一句,你知道每个会话的CONTEXT_INFO()是否以NULL开头,因为这样做有意义吗?谢谢你提供的上下文信息,我也不知道。这是很棒的东西。是的,从NULL开始,但不能重置回来。我只用它来触发。