我必须在该服务器上运行包含Scalar UDF(带有一个参数)的链接服务器(SQL Server 2008)的查询,当我运行查询时出现以下错误
Cannot find either column "PSW_Local" or the user-defined function or aggregate "PSW_Local.dbo.udf_psw_local_format_name", or the name is ambiguous.
我使用OPEN Query
在互联网上关注了某人的建议,但它无效。
有人可以提出不同的方法吗? 提前致谢
答案 0 :(得分:4)
要引用链接服务器,您必须对要在链接服务器上引用的对象使用4部分命名。
这是由[SERVER_NAME]。[DATABASE_NAME]。[SCHEMA_NAME]。[OBJECT_NAME]
组成的这是一篇很好的小文章,可以解释它 - http://www.mssqltips.com/sqlservertip/1095/sql-server-four-part-naming/
确保SERVER_NAME是本地计算机上为服务器指定的名称。 (我假设已经测试了与链接服务器的连接。)
要在链接服务器上引用功能,您确实需要使用OPENQUERY。代码看起来像这样:
SELECT * FROM OPENQUERY([LINKED_SERVER_NAME],'SELECT [DATABASE_NAME].[SCHEMA_NAME].FUNCTION_NAME()')
请注意,如果您使用字符串作为函数的参数,则需要对其进行双引号。
答案 1 :(得分:0)
OpenQuery功能有效:
SELECT * FROM OPENQUERY([myservername\yyySQL2008R2],
'SELECT mydb.dbo.ElapsedWorkDays(''1/1/2017'',GETDATE()) ' );
我测试了这个并且语法有效。
答案 2 :(得分:0)
如果你需要传入参数并返回一个值,那么你可以使用这样的东西;
DECLARE @Arg1 INT = 1234;
DECLARE @Arg2 VARCHAR(15) = 'ABCD';
DECLARE @ReturnValue INT;
DECLARE @Parameters NVARCHAR(255) = '@ReturnValue INT OUTPUT'
DECLARE @Command NVARCHAR(MAX) =
N'SELECT @ReturnValue = [ReturnValue] FROM OPENQUERY(
[LINKED_SERVER]
, ''SELECT [Database].[schema].[ScalarValuedFunction](' + CAST(@Arg1 AS VARCHAR(255)) + ', ''''' + @Arg2 + ''''') ReturnValue''
)'
PRINT @Command
EXEC sys.sp_executesql
@Command, @Parameters, @ReturnValue=@ReturnValue OUTPUT
SELECT @ReturnValue [ReturnValue]