从select语句中调用SQL链接服务器函数或存储过程

时间:2016-02-23 17:48:51

标签: sql-server stored-procedures linked-server openquery

我有一个存储过程,它调用查找函数作为SELECT语句的一部分:

-- PX type
CASE WHEN coi.SKU_ID like 'PX%' THEN
    [GG].dbo.PXStockInventoryLookup(coi.SKU_ID)
ELSE
    0
END

在生产环境中,GG数据库位于不同的服务器上,因此使用链接服务器来引用它。尝试使用4部分命名调用该函数会出现此错误:

Remote function reference 'UATLINK.GG.dbo.PXStockInventoryLookup' is not allowed, and the column name 'UATLINK' could not be found or is ambiguous.

经过一些研究后,我发现在本地函数中使用Dynamic SQLOPENQUERYsp_executesql

DECLARE @ParamDefinition as nvarchar(100)
SET @ParamDefinition = N'@Result int output'
DECLARE @sql nvarchar(4000);
SET @sql = 'SELECT * FROM OPENQUERY( [UATLINK], ''SELECT  [GG].[dbo].[PXStockInventoryLookup](''''' + @param + ''''')'')'
exec sp_executesql @sql, @ParamDefinition, @Result = @sii output
return @sii

这段代码可以独立工作,但是我不能创建一个函数,因为SQL不允许我从另一个函数中调用一个函数。我可以创建作为存储过程,但我无法从select语句中调用它!

我只是绕圈试图解决这个问题,任何想法?

0 个答案:

没有答案