我想根据我是否在工作区或存储过程服务器上下文中有条件地执行代码。
我可以通过测试自动STP变量的存在来做到这一点,例如_metaperson
,但这不会非常强大。
假设我已经有了元数据连接,那么如何最好地检查我的服务器类型?
答案 0 :(得分:2)
防弹方式是创建一个宏变量,该变量由autoexec或config在所需的服务器上下文中初始化。
当然,这只有在您有权修改存储在sas配置文件夹中的文件时才有效。
答案 1 :(得分:2)
Hurray - 事实上,有一个自动变量可以做到这一点 - sysprocessmode
(自9.4以来可用)
SYSPROCESSMODE是一个只读的自动宏变量,其中包含 当前SAS会话运行模式或服务器类型的名称,例如 以下内容:
- SAS DMS会话
- SAS批处理模式
- SAS线路模式
- SAS / CONNECT Session
- SAS Share Server
- SAS IntrNet Server
- SAS Workspace Server
- SAS Pooled Workspace Server
- SAS存储过程服务器
- SAS OLAP服务器
- SAS Table Server
- SAS Metadata Server
答案 2 :(得分:1)
存储的进程服务器将使用正在运行的程序预设_PROGRAM
宏变量。我不知道这个宏变量在STP执行上下文中是否是只读的。
但正如您所说,工作区上下文中的程序可以设置_PROGRAM
宏变量。
对于工作区会话,查找_CLIENTAPP
宏变量。
我不知道可以检查的函数调用或不可变系统选项。在两个上下文中尝试PROC OPTIONS,看看弹出的内容。如果报告,则OBJECTSERVERPARMS
值是名称=值对的列表。其中一个是server=
,可以区分。