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

Determining Server Context (Workspace Server vs Stored Process Server)

我想根据我是在工作区还是存储过程服务器上下文中有条件地执行代码。

我可以通过测试自动 STP 变量的存在来做到这一点,例如 _metaperson,但这不是很可靠。

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

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

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

存储过程服务器会用运行的程序预置_PROGRAM宏变量。不知道这个宏变量在STP执行上下文中是不是只读的

但是正如您所说,工作区上下文中的程序可以设置 _PROGRAM 宏变量。

对于工作区会话,查找 _CLIENTAPP 宏变量。

我不知道要调用的函数或可以检查的不可变系统选项。在两种情况下都尝试 PROC OPTIONS 并查看弹出的内容。 OBJECTSERVERPARMS 值(如果报告的话)是名称=值对的列表。其中之一是 server= 并且可以区分。

Hurrah - 事实上,有一个自动变量可以做到这一点 - sysprocessmode(自 9.4 起可用)

摘自documentation

SYSPROCESSMODE is a read-only automatic macro variable, which contains the name of the current SAS session run mode or server type, such as the following:

  • SAS DMS Session
  • SAS Batch Mode
  • SAS Line Mode
  • SAS/CONNECT Session
  • SAS Share Server
  • SAS IntrNet Server
  • SAS Workspace Server
  • SAS Pooled Workspace Server
  • SAS Stored Process Server
  • SAS OLAP Server
  • SAS Table Server
  • SAS Metadata Server

作为一个自动变量,当然是只读的: