Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вызов функции. MSSQL2008. Ошибка в функции (Only functions and some extended stored proce)  [new]
AsterixM
Member

Откуда:
Сообщений: 234
Какие есть варианты ? Данную процедуру использую при открытии приложения...
Т.е. если не указан userid, то брать сетевое имя (текущий пользователь, тот который залогинился к БД) !

create function [dbo].[User_get]
--- Получение идентификатора пользователя по его логину
(
     @User varchar(1500) = null  --- логин пользователя
) 
  returns numeric(15) as
begin
Declare  
  @Result numeric(15),
  @UserName varchar (1500) ;

    ---Обработка пустого логина
    if @User = '' or @User is null 
      Select @UserName =  user_name() --'OFFICE\sergei.mozaev'      например
   else
      Set @UserName = @User ;    
      
  
  If exists  (Select U.Id
         from user_lst U
        where UPPER( u.login) = UPPER (@UserName) )
     Select @Result = U.Id
         from user_lst U
        where UPPER( u.login) = UPPER (@UserName)   
   else
        Exec util_Abort 'Не найден пользователь ' ; 

       
  return @Result;
      
end 


Выдает ошибку
"Only functions and some extended stored procedures can be executed from within a function."

убираю вызов процедуры(генерирует ошибку и вызывает метод RAISEERROR) - - работает
    Exec util_Abort 'Не найден пользователь ' ;
16 июл 12, 15:02    [12872862]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции. MSSQL2008. Ошибка в функции (Only functions and some extended stored proce)  [new]
Yasha123
Member

Откуда:
Сообщений: 1837
в посте пишете, что это процедура, а написана функция.
у функций ограничение:

UDF can not Call Stored Procedure
Only access to Extended Stored Procedure.
(ошибка про то же и говорит)

перепишите как процедуру
16 июл 12, 15:38    [12873083]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции. MSSQL2008. Ошибка в функции (Only functions and some extended stored proce)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
автор
убираю вызов процедуры(генерирует ошибку и вызывает метод RAISEERROR) - - работает

а зачем нужно вызывать ХП для этих целей? (умолчим про то, что их вызов запрещен в функции)

либо вызывайте raiseerror прямо в функции или же (вдруг там какая-то логика)
перепишите код на примерно следующий
Declare  
  @Result numeric(15),
  @UserName varchar (1500) ;

    ---Обработка пустого логина
    if @User = '' or @User is null 
      Select @UserName =  user_name() --'OFFICE\sergei.mozaev'      например
   else
      Set @UserName = @User ;    
      
  set @Result = (Select U.Id
         from user_lst U
        where UPPER( u.login) = UPPER (@UserName)  ) 

       
  return @Result;

а там где вызываете функцию уже проверяйте результат на Null и если таков, то вызывайте обработчик ошибки
Exec util_Abort 'Не найден пользователь '

(если это приемлимо)
16 июл 12, 18:16    [12874052]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции. MSSQL2008. Ошибка в функции (Only functions and some extended stored proce)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37067
HandKot
либо вызывайте raiseerror прямо в функции или же (вдруг там какая-то логика)
Пиу-пиу. Не взлетит, ибо:
Msg 443, Level 16, State 14, Procedure User_get, Line 8
Invalid use of a side-effecting operator 'RAISERROR' within a function.
16 июл 12, 18:19    [12874066]     Ответить | Цитировать Сообщить модератору
 Re: Вызов функции. MSSQL2008. Ошибка в функции (Only functions and some extended stored proce)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
каюсь, и на старуху бывает проруха :)
16 июл 12, 18:35    [12874170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить