Sas 确定服务器上下文(工作区服务器与存储进程服务器)

Sas 确定服务器上下文(工作区服务器与存储进程服务器),sas,sas-metadata,sas-stored-process,Sas,Sas Metadata,Sas Stored Process,我希望有条件地执行代码,这取决于我是在工作区中还是在存储的Process server上下文中 我可以通过测试自动STP变量的存在性来做到这一点,例如\u metaperson,但这不会非常健壮 假设我已经有一个元数据连接,如何最好地检查我的服务器类型?防弹的方法是创建一个宏变量,该变量由autoexec或config在所需的服务器上下文中初始化 当然,这只有在您有权修改存储在sas配置文件夹中的文件时才有效。存储的process server将使用正在运行的程序预设\u程序宏变量。我不知道这个

我希望有条件地执行代码,这取决于我是在工作区中还是在存储的Process server上下文中

我可以通过测试自动STP变量的存在性来做到这一点,例如
\u metaperson
,但这不会非常健壮


假设我已经有一个元数据连接,如何最好地检查我的服务器类型?

防弹的方法是创建一个宏变量,该变量由autoexec或config在所需的服务器上下文中初始化


当然,这只有在您有权修改存储在sas配置文件夹中的文件时才有效。

存储的process server将使用正在运行的程序预设
\u程序
宏变量。我不知道这个宏变量在STP执行上下文中是否是只读的

但是正如您所说,工作区上下文中的程序可以设置一个
\u program
宏变量

对于工作区会话,请查找
\u CLIENTAPP
宏变量


我不知道要调用的函数或可以检查的不可变系统选项。在这两种上下文中尝试PROC选项,看看会弹出什么。
OBJECTSERVERPARMS
值(如果报告)是名称=值对的列表。其中一个是
server=
,可能会有所区别。

Hurrah-事实上,有一个自动变量可以做到这一点-
sysprocessmode
(从9.4开始提供)

摘录自:

SYSPROCESSMODE是一个只读的自动宏变量,它包含 当前SAS会话运行模式或服务器类型的名称,例如 以下是:

  • SAS DMS会话
  • SAS批处理模式
  • SAS线路模式
  • SAS/连接会话
  • SAS共享服务器
  • SAS互联网服务器
  • SAS工作区服务器
  • SAS池工作区服务器
  • SAS存储进程服务器
  • SAS OLAP服务器
  • SAS表服务器
  • SAS元数据服务器
作为一个自动变量,它当然是只读的:

但它不是防弹的-有人随后可以在其他服务器上下文中创建类似的宏变量:-)感谢这些想法。。
options
:-/中没有任何内容,但在尝试对
\u webout
fileref(流引擎)进行条件测试后,我终于找到了
sysprocessmode