Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2014, 14:16   #1
Ilyard
 
Регистрация: 09.01.2013
Сообщений: 5
Сообщение Ошибка при вызове табличной функции в SQL Server

Добрый день.
Я, будучи ламером, пытаюсь написать функцию по выводу списка подчинённых конкретного сотрудника, имеющего определённый уровень в компании. В функцию в @emp передаю id сотрудника, чих подчинённых мне нужно вывести.
Вот функция:

Код:
create function getsub_emploees (@emp int) returns @tbl table (empname nvarchar(100),empid int)
as
begin
declare @position int;
declare @department int;
declare @level int;
select @position = pos_id from statetable where emp_id = @emp;--получили pos_id
select @department = dep_id from statetable where emp_id = @emp;--получили dep_id
select @level = p.poslev from statetable st inner join position p--получили poslev (УРОВЕНЬ)
on st.pos_id=p.id where emp_id = @emp;
if (@level=4)--работники
begin
return;
--break;
end;
else if (@level=3)--начальники отделов
begin
insert @tbl select e.empname,st.emp_id from statetable st
inner join position p on
p.id = st.pos_id
inner join employee e on
st.emp_id = e.id
where p.poslev >3 and st.dep_id=@department;--то отображать уровнем ниже и в вашем отделе
end;
else if (@level=2)--директора дирекций(офисов)
begin
insert @tbl select e.empname,st.emp_id from statetable st
inner join position p on
p.id = st.pos_id
inner join employee e on
st.emp_id = e.id
inner join departments d on
st.dep_id = d.id
where p.poslev =3 and d.depoffice = (select depoffice from departments where id=@department);
/*то отображать уровнем ниже и в вашей дирекции (офисе) */
end;
else if (@level=1)--президент
begin
insert @tbl select e.empname,st.emp_id from statetable st
inner join position p on
p.id = st.pos_id
inner join employee e on
st.emp_id = e.id
where p.poslev =2;
/*то отображать всех уровнем ниже*/
end;
return;
end;
Всё скомпилилось без ошибок. Но когда я вызываю функцию:

select dbo.getsub_emploees(6);
мне ругается:
Msg 4121, Level 16, State 1, Line 1
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.getsub_emploees", or the name is ambiguous.
Что я не так делаю?



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.04.2014 в 10:24.
Ilyard вне форума Ответить с цитированием
Старый 05.04.2014, 21:38   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

а не смущает что вызов странноватый?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка линковки при вызове функции другой библиотеки revaldo666 Общие вопросы C/C++ 2 23.07.2012 16:45
Ошибка при переустановке MS SQL Server 2005 Aleksey1989 SQL, базы данных 0 27.09.2011 10:39
Ошибка при вызове функции Access violation Hottabych Win Api 1 22.01.2011 20:35
Ошибка при вызове хранимой функции MySQL tavrocotaps Общие вопросы .NET 0 23.04.2010 10:25