#sql-server
#sql-server
Вопрос:
create function cau3(@TenLop char(2))
returns @cau table(
MaLop int,
TenLop char(2),
sl int
)
as
begin
declare @checked bit
select @checked =
case when exists (select * from Lop where TenLop=@TenLop)
then CAST(1 as bit)
else cast(0 as bit)
if @checked=1
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop and Lop.TenLop=@TenLop
group by Lop.MaLop, Lop.TenLop
end
else
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop
group by Lop.MaLop, Lop.TenLop
end
end
я искал больше дня, но не нашел никаких решений: (( вы можете мне помочь? это так много.
я пытался использовать «if (exists (select» раньше, но также получил эту «ошибку», извините за мой плохой английский
Комментарии:
1.
END
отсутствует вCASE
.2. Здесь многое можно улучшить. Вам не нужно запрашивать и устанавливать
@checked
— простое «если существует … то … else …» делает именно то, что вам нужно, с меньшим количеством кода и меньшим риском. Вам не следует использовать объединения в старом стиле . У вас есть неиспользуемые параметры. Результирующий набор, сгенерированный двумя логическими ветвями, подозрителен и потенциально вводит в заблуждение потребителя результирующего набора.
Ответ №1:
Пропустил слово end
в вашем случае выбора. И вам также нужно поставить return
в конце функции.
Вот так
create function cau3(@TenLop char(2))
returns @cau table(
MaLop int,
TenLop char(2),
sl int
)
as
begin
declare @checked bit
select @checked =
case when exists (select * from Lop where TenLop=@TenLop)
then CAST(1 as bit)
else cast(0 as bit)
end
if @checked=1
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop and Lop.TenLop=@TenLop
group by Lop.MaLop, Lop.TenLop
end
else
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop
group by Lop.MaLop, Lop.TenLop
end
return
end
Комментарии:
1. Привет, @Iroha! Если у вас это сработало, пожалуйста, примите это как ответ.
2. Это следует обновить, чтобы использовать соединения ANSI (старый стиль устарел и существует уже более десяти лет), и использовать точки с запятой в конце инструкций. Сейчас уже не 2000 год.
3. извините всех, я попал в аварию, из-за которой я пролежал в больнице несколько месяцев. это работает, вам так нравится
Ответ №2:
create function cau3(@TenLop char(2))
returns @cau table(
MaLop int,
TenLop char(2),
sl int
)
as
begin
declare @checked bit
select @checked =
(case when exists (select * from Lop where TenLop=@TenLop)
then CAST(1 as bit)
else cast(0 as bit)
end)
if @checked=1
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop and Lop.TenLop=@TenLop
group by Lop.MaLop, Lop.TenLop
end
else
begin
insert @cau
select Lop.MaLop, Lop.TenLop, count(MaSV) as sl from SV,LOP where SV.MaLop=Lop.MaLop
group by Lop.MaLop, Lop.TenLop
end
end