Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Аналог IF @@ROWCOUNT > 0 из T-SQL'a / 4 сообщений из 4, страница 1 из 1
20.05.2012, 12:43
    #37802667
n3wb13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IF @@ROWCOUNT > 0 из T-SQL'a
Имеется т-скл запрос к таблице [foo] (bar_id int primary key autoincrement, bar_name varchar)

Код: sql
1.
2.
3.
4.
insert into foo(bar_name)
 values(@bar_name_new);
if @@rowcount > 0 then
 select bar_id, bar_name from foo where bar_id = scope_identity();



После вставки поле bar_name может модифицироваться триггером, поэтому я обновляю вставленную запись.
Нужно реализовать подобный функционал в sqlite. Т.е. если изменений не произошло - не выполнять селект вообще.
Сейчас запрос в таком виде:

Код: sql
1.
2.
3.
insert into foo(bar_name)
 values(@bar_name_new);
 select bar_id, bar_name from foo where bar_id = (SELECT last_insert_rowid());



Про функции changes() и case when в курсе, но как это все сплести в запросе? Т.е. если changes() вернуло 0 - не выполнять селект вообще.
...
Рейтинг: 0 / 0
20.05.2012, 12:59
    #37802678
n3wb13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IF @@ROWCOUNT > 0 из T-SQL'a
немного некорректно получилось с инсертом, так как опустил много логики.
В таком случае запросы в 1м посте читать как апдейты:

Код: sql
1.
2.
3.
4.
5.
update foo
  set bar_name = @bar_name_new
  where bar_id = @bar_id_old and bar_name = @bar_name_old;
if @@rowcount > 0 then
 select bar_id, bar_name from foo where bar_id = @bar_id_old;



обновление может завершиться неуспешно по некоторым причинам, в таком случае селект делать не надо.
Как такое реализовать в sqlite?
...
Рейтинг: 0 / 0
20.05.2012, 13:17
    #37802688
n3wb13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IF @@ROWCOUNT > 0 из T-SQL'a
Сделал вот таким вот извращенным способом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select
 case when changes() > 0 then id end,
 case when changes() > 0 then date end, 
 case when changes() > 0 then flattype end, 
 case when changes() > 0 then dealtype end, 
 case when changes() > 0 then address end, 
 case when changes() > 0 then square end, 
 case when changes() > 0 then floors end, 
 case when changes() > 0 then floor end, 
 case when changes() > 0 then balcony end,  
 case when changes() > 0 then price end, 
 case when changes() > 0 then contact end, 
 case when changes() > 0 then additional end
from flats where id=@idOld
...
Рейтинг: 0 / 0
21.05.2012, 23:51
    #37804908
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог IF @@ROWCOUNT > 0 из T-SQL'a
> n3wb13,
> Сделал вот таким вот извращенным способом

А так не подойдёт ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
 id,
 date, 
 flattype, 
 dealtype, 
 address, 
 square, 
 floors, 
 floor, 
 balcony,  
 price, 
 contact, 
 additional
from flats 
where changes() > 0 and id=@idOld
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Аналог IF @@ROWCOUNT > 0 из T-SQL'a / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]