2

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

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

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

4

3 回答 3

2

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

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

于 2018-01-26T16:50:31.847 回答
2

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

从文档中提取:

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

  • SAS DMS 会话
  • SAS 批处理模式
  • SAS 线路模式
  • SAS/连接会话
  • SAS 共享服务器
  • SAS 内部网服务器
  • SAS 工作区服务器
  • SAS 池化工作区服务器
  • SAS 存储过程服务器
  • SAS OLAP 服务器
  • SAS 表服务器
  • SAS 元数据服务器

作为一个自动变量,它当然是只读的: 在此处输入图像描述

于 2018-01-31T09:09:25.033 回答
1

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

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

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

我不知道可以检查的调用函数或不可变系统选项。在这两种情况下尝试 PROC OPTIONS 看看会弹出什么。如果 OBJECTSERVERPARMS报告了值,则它是名称=值对的列表。其中之一将是server=并且可能会有所不同。

于 2018-01-27T02:09:12.623 回答