代码之家  ›  专栏  ›  技术社区  ›  Allan Bowe

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

  •  2
  • Allan Bowe  · 技术社区  · 7 年前

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

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

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

    3 回复  |  直到 7 年前
        1
  •  2
  •   Uwe Keim Tomasz    7 年前

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

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

        2
  •  2
  •   Allan Bowe    6 年前

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

    摘录自 documentation :

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

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

    作为自动变量,它当然是只读的: enter image description here

        3
  •  1
  •   Richard    7 年前

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

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

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

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

    推荐文章