在链接服务器上调用标量函数

时间:2018-07-12 15:14:05

标签: sql sql-server

我正在尝试在链接服务器上调用标量函数,但是在设置它时遇到了一些麻烦。我希望将其设置为服务器上的功能。 以下是我想出的最好的方法。

我正在尝试在服务器上的函数中包装一个openquery语句。但是,查询本身无法正常工作,我无法返回结果而不会导致错误。

USE POWERVIEW
GO
ALTER FUNCTION DBO.FN_VAR_DUMPNAME (@DUMPLOC NVARCHAR(40))  
RETURNS NVARCHAR(40)
AS
BEGIN
    --DECLARE @DUMPLOC NVARCHAR(40)='D11'
    DECLARE @sql nvarchar(800)
    DECLARE @param Nvarchar(20)= @DUMPLOC
    DECLARE @retval NVARCHAR(40)   

    DECLARE @ParmDefinition nvarchar(500)=N'@retvalOUT NVARCHAR(40) OUTPUT'
    DECLARE @innersql nvarchar(400)

    SET @innersql = 'SELECT POWERVIEW.DBO.FN_VAR_DUMPNAME('''+''''+@param +''''+''')'
    SET @sql = 'select * from openquery(MINESQLSERVER,'''+ @innersql +''' )' 

    ***RETURN EXEC sp_executesql @sql --This line does not work***
END

1 个答案:

答案 0 :(得分:0)

这个评论太长了。

SQL Server不允许函数调用动态SQL。因此,您无法做自己想做的事。

您还有其他问题:

  • return exec并不是我以前见过的东西。
  • exec返回一个整数。
  • 该函数返回一个字符串。

您将需要使用其他方法来解决问题-想到一个存储过程。