Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Как выполнить функцию в функции


Автор: MadCoder 13.5.2008, 08:08
Здравствуйте!

Написал небольшой запрос на авторизацию:
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER  FUNCTION [dbo].[Checkpassword] (@userlogin varchar(32), @userpassword varchar(32))  
RETURNS int AS  
begin
DECLARE @RC int;
    IF @userpassword = (select password from tblEmployee where userlogin=@userlogin)
    select @RC = (select empl_id from dbo.tblEmployee where userlogin=@userlogin)
ELSE
    SELECT @RC= -1; 

IF @RC =-1
EXECUTE [etap].[dbo].[InsLogRec] 
   @RC
  ,''
  ,'Вход'

return @RC
end


Хочу сделать так, чтобы после успешной авторизации этот же запрос добавлял события в таблицу логов (за это отвечает процедура InsLogRec). Никак не получается вставить ее в функции авторизации, пишет следующее при выполнении:
Msg 557, Level 16, State 2, Procedure Checkpassword, Line 16
Only functions and extended stored procedures can be executed from within a function.


Попробовал сделать обычным Insert'ом, пишет, что нельзя выполнять инсерт в функциях :(. 

Что делать?

Автор: MadCoder 13.5.2008, 09:11
Вся проблема в том, что MS SQL не может выполнять функции, вложенные в друг друга или операцию Insert. Переписал функция как процедуру - и все заработало. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)