在 SQL Server (2016) 中,我们使用SESSION_CONTEXT()和sp_set_session_context在键值存储中检索/存储自定义变量。这些值仅在会话中可用,并且它们的生命周期在会话终止时结束。(或者在早期版本中,旧的CONTEXT_INFO将一些数据存储在 varbinary 中)。
我正在 EXASol (6.0) 中寻找类似的解决方案。
一个明显的方法是创建一个表并将此信息存储在那里,但这需要预定的清理脚本并且比内置解决方案更容易出错。这是后备计划,但我想确定没有其他选择。
另一种选择可能是在数据库中创建单个用户并对其进行配置,但仅仅因为要添加的用户数量,这被排除在外。
用例如下:一个应用程序有几个用户,每个用户都有一些值要在每个查询中使用。该应用程序只能访问某些视图。
这在 SQL Server 中非常有效,但我们想测试 EXASol 作为具有相同功能的替代方案。
我在EXASol 手册中找不到任何相关内容,但有可能是我错过了一些东西。
这是 SQL Server 2016 中的简化示例代码
sp_set_session_context @key='filter', @value='asd', @read_only=1;
CREATE VIEW FilteredMyTable AS
SELECT Col1, Col2, Col3 FROM MyTable
WHERE MyFilterCol = CONVERT(VARCHAR(32), SESSION_CONTEXT('filter'))
我尝试了一个明显不可行的解决方案,只是为了测试它是否有效(它没有)。
ALTER SESSION SET X_MY_CUSTOM_FILTER = "asd"