OPENQUERY里面的功能

时间:2015-09-15 14:15:26

标签: sql-server database tsql linked-server openquery

我需要创建一个函数,通过openquery对链接服务器执行查询,返回标量值。

我的问题是我无法使用静态查询,因为其中一个函数参数标识了必须从OPENQUERY返回的字段。所以我的第一次尝试是构建将字符串连接成@SQL变量的查询。但是

select * from OPENQUERY(LNKSERVER,@SQL) 

返回错误:Expecting STRING or TEXT_LEX

使用存储过程通过链接服务器执行查询的解决方案不适用,因为我在函数内部。

INSERT INTO #TempTable  exec (@SQL) at LNKSERVER

到目前为止,我已经解决了选择所有可能的列,然后取消选择它们并选择PropertyName是所希望的行的行(但在我看来很糟糕)。

SELECT @value = Value
FROM
(
    select 
        field1,
        field2,
        ...

        from OPENQUERY(LNKSERVER, 
 'SELECT 
    field1,
    field2,
    ...
  FROM table 
  INNER JOIN ...') 
        where  SampleId = @SampleId) qry
        UNPIVOT
        (
            Value FOR PropertyName IN (
                field1,
                field2,
                ... 
            )
        ) AS unpivoted

where PropertyName = @PropertyName

使用此解决方案的溺水如下:

  1. 效果:每次查询很多字段,而不仅仅是所需的字段
  2. 维护:每次我需要查询新属性(尚未包含在函数查询中)时,我还必须修改我的函数。因此,动态环境并不好。
  3. 我不是TSQL专家,所以也许有人可以给我一些提示以简化事情?

0 个答案:

没有答案