我需要创建一个函数,通过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
使用此解决方案的溺水如下:
我不是TSQL专家,所以也许有人可以给我一些提示以简化事情?