T-SQL捕获链接服务器名称作为结果列

时间:2014-08-12 12:57:07

标签: sql tsql plsql oracle11g

如何将(链接的)服务器(在本例中为Morpheus)名称捕获为结果列。我不想在查询本身中定义服务器名称。

exec("
    select 
                COMNO
                ,T$CPLS ""Catalog"" 
                ,T$CUNO ""Customer ID.""
                ,T$CPGS ""Price Group""
                ,T$ITEM ""Item Code""
                ,T$UPCD UPC
                ,T$DSCA ""Description""
                ,T$WGHT ""Weight""
                ,T$SHIP ""Shipping Indicator""
                ,nvl(T$STDT,to_char(sysdate,'YYYY-MM-DD')) ""From""
                ,nvl(case T$TDAT
                            when '4712-01-01' then ' ' 
                            when null then '  '
                            else t$tdat 
                         end,'  ')  ""To"" 
                ,nvl(t$qanp,99999999) ""Qty.""
                ,T$PRIC ""List Price""
                ,T$DISC ""Discount""
                ,to_char(round(t$pric * (1-t$disc/100),2),99999.99) ""Net""
                ,Source ""Source"" 
            from Table(edi.ftCompositCatalog(?,?,?)) --where trim(t$item)='105188-041'
      order by Source,t$cpgs,t$item",'010','145','000164') at morpheus

1 个答案:

答案 0 :(得分:2)

如果在运行查询时,您已经知道要指向的链接服务器,那么只需将其作为字符串文字包含在结果中:

exec("
    select
     'morpheus' ""Server Name""
    ,T$CPLS ""CATALOG""
...

即使链接的服务器名称存储在变量中,您也可以轻松地执行此操作,因为您正在动态构建查询字符串。

正如您所说,如果您不想将其定义为字符串文字,这是在Oracle中获取主机(服务器)名称的常用方法:

SELECT SYS_CONTEXT ('USERENV', 'SERVER_HOST') FROM DUAL;

如果要在查询中将其作为子查询或内联视图嵌入,我认为它会起作用。

*请注意一些组织&出于安全原因,dba并不希望您知道有关后端环境的任何信息,但假设您没有障碍,这应该可行。