如何在链接服务器上的master数据库中调用UDF

时间:2015-09-02 19:16:34

标签: sql-server remote-server udf

我无法在链接服务器中调用UDF。

这是我的T-SQL代码:

DECLARE @Phone_Digits_Input varchar(12);
DECLARE @Phone_Min_Max_Input varchar(5);
DECLARE @Phone_Digits_String varchar(10);
DECLARE @Phone_Min_Max_String varchar(5);
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @phone_digits varchar(10);

SET @Phone_Digits_String = 'phone_digits';
SET @Phone_Min_Max_String = '10-10';

SET @SQLString = N'SELECT @phone_digitsOUT = RemoteServer.master.dbo.myUDF(@Phone_Digits_Input, @Phone_Min_Max_Input)';
SET @ParmDefinition = N'@Phone_Digits_Input varchar(10), @Phone_Min_Max_Input varchar(5), @phone_digitsOUT varchar(10) OUTPUT';

EXECUTE RemoteServer.master.dbo.sp_executesql @SQLString, @ParmDefinition, @Phone_Digits_Input = @Phone_Digits_String,
     @Phone_Min_Max_Input = @Phone_Min_Max_String,
    @phone_digitsOUT=@phone_digits OUTPUT;
SELECT @phone_digits;

当我运行它时,我收到一条消息:

  

Msg 344,Level 16,State 1,Line 1
  远程功能参考' RemoteServer.master.dbo.myUDF'不允许,列名称' RemoteServer'无法找到或含糊不清。

我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

我得到了服务器名称! UDF是我不同的数据库!对不起我的困惑。 最终代码如下:

DECLARE @Phone_Digits_Input varchar(12);
DECLARE @Phone_Min_Max_Input varchar(5);
DECLARE @Phone_Digits_String varchar(10);
DECLARE @Phone_Min_Max_String varchar(5);
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @phone_digits varchar(10);

SET @Phone_Digits_String = 'phone_digits';
SET @Phone_Min_Max_String = '10-10';

SET @SQLString = N'SELECT @phone_digitsOUT = dbo.MyUDF(@Phone_Digits_Input, @Phone_Min_Max_Input)';
SET @ParmDefinition = N'@Phone_Digits_Input varchar(10), @Phone_Min_Max_Input varchar(5), @phone_digitsOUT varchar(10) OUTPUT';

EXECUTE MyServer.MyDB.dbo.sp_executesql @SQLString, @ParmDefinition, @Phone_Digits_Input = @Phone_Digits_String,
       @Phone_Min_Max_Input = @Phone_Min_Max_String,
       @phone_digitsOUT=@phone_digits OUTPUT;
SELECT @phone_digits;

谢谢。