Как мне преобразовать этот локальный вызов функции в удаленный вызов функции? - PullRequest
1 голос
/ 24 апреля 2019

Я видел другие посты, в которых говорится об использовании OPENQUERY для вызова функции на удаленном сервере, но я не смог заставить это работать для моей простой функции, которая возвращает числовое значение. (Я не могу изменить эту функцию, поэтому я застрял с ее параметрами и возвращаемым значением):

DECLARE @ProjectDepartment NUMERIC(12,0);
DECLARE @Department NUMERIC(12,0);

SET @Department = 104;

SET @ProjectDepartment = db.schema.GetSharing(@Department, 'DeliveryPlace');

Я пробовал:

SELECT
  @ProjectDepartment = @ProjectDepartment
FROM
  OPENQUERY(server,
  'SELECT @ProjectDepartment
    FROM db.schema.GetSharing(@Department, "DeliveryPlace")');

и

EXECUTE @ProjectDepartment = server.db.schema.sp_executesql
  N'SELECT db.schema.GetSharing(@Department, "DeliveryPlace")',
  N'@Department NUMERIC(12,0)',
  @Department = 104;

и

DECLARE @sql NVARCHAR(4000);

SET @sql = 'SELECT' +
CAST(@ProjectDepartment AS NVARCHAR(12)) +
'FROM OPENQUERY(server,
''SELECT ' + CAST(@ProjectDepartment AS NVARCHAR(12)) +
' = db.schema.GetSharing(' + CAST(@Department AS NVARCHAR(12)) + ', "DeliveryPlace")'')';

EXEC(@sql);

Я работаю в SQL Server Management Studio 17.9.1.

ДОБАВЛЕНО:

Я добавил это к процедуре тестирования:

Use db
GO

DECLARE @ProjectDepartment  NUMERIC(12,0);
DECLARE @Department         NUMERIC(12,0);

SET @Department = 104;

EXEC @ProjectDepartment = server.db.schema.sp_executesql
N'SELECT GetSharing(@Department, "DeliveryPlace")',
N'@Department NUMERIC(12,0)',
@Department=@Department;

Я получил эту ошибку:

Could not find stored procedure 'db.schema.sp_executesql'.

Когда я использую этот код в своей реальной функции, я все еще получаю эту ошибку:

Remote function calls are not allowed within a function.  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...