我经常在一个脚本中批量测试我的SQL脚本,并在脚本开头声明变量,以便在多个查询中使用。
是否有一种方法可以声明一个持续的变量,比如连接会话的长度,这样我就不必重新声明/硬编码了?
当单独测试查询时,我要么运行整个脚本直到变量声明,暂时在我正在测试的部分重新声明变量,或者暂时硬编码变量。
Declare @StartDate as Date = '20220701'
Declare @EndDate as Date = '20220707'
如果你正在使用SQL Server 2016+,你可以使用session_context。
为键/值数据对提供会话(@@SPID
)生命周期的工作存储。
/* set a value */
exec sp_set_session_context 'MyName', 'my value';
/* retrieve a value */
select Session_Context('MyName');
详细信息请参见文档
我使用的一种可能性是CONTEXT_INFO
,它在会话或批处理期间保存数据,并在事务回滚中幸存。
declare @contextInfo varbinary(128) = cast('Things and Stuff' as varbinary(128));
set context_info @contextInfo;
select cast(context_info() as varchar(128));
结果:
--------------------------------------------------------------------------------------------------------------------------------
Things and Stuff
(1 row affected)