Как вызвать расширенную процедуру из функции - PullRequest
1 голос
/ 10 марта 2010

Привет, у меня возникли проблемы при попытке заставить работать следующую функцию.

CREATE FUNCTION test ( @nt_group VARCHAR(128) )
RETURNS @nt_usr TABLE (
      [name] [nchar](128) NULL
    , [type] [char](8) NULL
    , [privilege] [char](9) NULL
    , [mapped login name] [nchar](128) NULL
    , [permission path] [nchar](128) NULL
    )
AS BEGIN 

    INSERT  INTO @nt_usr
    EXEC master.dbo.xp_logininfo 'DOMAIN\USER', @nt_group
     RETURN
   END

Насколько я знаю, мне нужно разрешить вызывать расширенную хранимую процедуру, я получаю следующую ошибку

Mes 443, Уровень 16, Состояние 14

Может ли xp_logininfo возвращать разные наборы результатов в зависимости от параметров? Когда я использую openquery, я могу преодолеть это, установив следующее: SET FMTONLY OFF. Кто-нибудь знает, есть ли подобное решение для моей проблемы?

1 Ответ

1 голос
/ 10 марта 2010

Вы не можете, потому что этот XP возвращает данные. Даже если вы загружаете таблицу.

В принципе, xps в udfs не является началом ... Я бы использовал хранимую процедуру

С CREATE FUNCTION

Вызов расширенных хранимых процедур из функций

Расширенная хранимая процедура, когда она вызывается изнутри функции, не может вернуть наборы результатов в клиент. Любые ODS API, которые возвращают наборы результатов клиенту вернет ПОТЕРПЕТЬ ПОРАЖЕНИЕ. Расширенная хранимая процедура может подключиться к экземпляру SQL Server; однако не стоит пытаться присоединиться к той же транзакции, что и функция, которая вызвала расширенный хранимая процедура.

Аналогично вызовам из партии или хранимая процедура, расширенная хранимая процедура будет выполнена в контекст безопасности Windows учетная запись, под которой находится SQL Server Бег. Владелец хранимого процедура должна учитывать это, когда давая EXECUTE разрешение на это пользователей.

...