我有一个存储过程,它调用查找函数作为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 SQL
,OPENQUERY
和sp_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语句中调用它!
我只是绕圈试图解决这个问题,任何想法?