Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / id / 20 сообщений из 20, страница 1 из 1
27.05.2006, 19:33
    #33756178
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Подскажите пожалуйста как определять первый незанятый id. Допустим я создал таблицу и в ней первичный ключ id номер. Когда я добавляю строку я с помощью курсора ищу первый незаняты ID, тоесть перебором, как это сзелать правильно?
...
Рейтинг: 0 / 0
27.05.2006, 19:49
    #33756191
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
http://www.rusug.ru/index.php?tree=18&mode=view&id=20
...
Рейтинг: 0 / 0
27.05.2006, 20:22
    #33756215
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
спасибо но это тот же Select, просто оптимизированый перебор, нельзя ли как нить сделать чтоб при добавлении сервер сам вставлял первый не заданый ID?
...
Рейтинг: 0 / 0
27.05.2006, 20:50
    #33756247
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Это наверно хранимая процедура. Подскажи пожалуйста как ее сохранить на сервере(никогда не имел с ними дела)
...
Рейтинг: 0 / 0
27.05.2006, 20:56
    #33756254
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Какие проблемы - реализуй подобный код в логике сервера. Очень на мой взгляд быстрый алгоритм - чем больше диапазон, тем быстрее работает.
Как вариант держать в отдельной таблице список свободных ID, но думаю что это нерационально ни по размеру, ни по скорости.
...
Рейтинг: 0 / 0
27.05.2006, 20:56
    #33756256
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
JudrПодскажите пожалуйста как определять первый незанятый id. Допустим я создал таблицу и в ней первичный ключ id номер. Когда я добавляю строку я с помощью курсора ищу первый незаняты ID, тоесть перебором, как это сзелать правильно?
Уточните используемый сервер и я перенесу вопрос в правильный тематический форум.
...
Рейтинг: 0 / 0
27.05.2006, 21:08
    #33756272
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
ASA 7.0
...
Рейтинг: 0 / 0
27.05.2006, 21:32
    #33756295
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Запусти код в интерактивке.
Ну а потом при вставке делаешь примерно так:
Код: plaintext
1.
insert into test_table (id,бла,бла,бла...)
values (FindFreeID( 0 ,  1000 ), bla,bla,bla...)
...
Рейтинг: 0 / 0
27.05.2006, 22:56
    #33756364
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
спасиб, скажи пожалуйста как удалит сохраняемую процедуру
...
Рейтинг: 0 / 0
28.05.2006, 13:05
    #33756615
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Смотри хелп по ASA в разделе SQL Statements. Там много вкусностей :))
...
Рейтинг: 0 / 0
28.05.2006, 13:32
    #33756638
Judr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Большое спасибо
...
Рейтинг: 0 / 0
29.05.2006, 07:44
    #33757269
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
select min(id+1) from table as t1 where
not exists(select* from table where id = t1.id+1)
...
Рейтинг: 0 / 0
29.05.2006, 12:53
    #33757919
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
old_joyselect min(id+1) from table as t1 where
not exists(select* from table where id = t1.id+1)

Красиво!
...
Рейтинг: 0 / 0
30.05.2006, 03:07
    #33759427
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Гы-гы. прикольно но глупо. Бр-р-р :))
...
Рейтинг: 0 / 0
30.05.2006, 09:44
    #33759650
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Глупо?
С 1998 года работает. Генерит номера прямых связей на цифровой АТС.
...
Рейтинг: 0 / 0
30.05.2006, 21:40
    #33761879
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Да ради бога, нехай работает. Достаточно сравнить время выполнения...
...
Рейтинг: 0 / 0
31.05.2006, 08:44
    #33762241
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
Во-первых, запрос "голый". Он дает направление, куда копать.
Во-вторых, на моих объемах время приемлемое.

ИМХО, мне больше нравиться select длиной в 50 см, чем процедура из десятка строк.
...
Рейтинг: 0 / 0
31.05.2006, 22:11
    #33764655
grach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
При маленьких диапазонах катит. На десятках тысяч уже тормозит не по-детски.
...
Рейтинг: 0 / 0
01.06.2006, 13:06
    #33765762
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
На работе подсказали:

select min(t1.id+1) from table as t1
left outer join table as t2 on t2.id=t1.id+1 where t2.id is null

Летает пулей
...
Рейтинг: 0 / 0
01.06.2006, 15:41
    #33766359
blzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
id
2 old_joy врядли мы работаем в одной организации, но мне подсказали именно такое же решение.
а для sybase ase у меня используется такое

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @id int
set rowcount  1 

select @id = (select min(t.id+ 1 ) from quotes as t left join quotes as t1 
		on (t1.id=(t.id+ 1 )) where t1.id is null ) 

if  (@id is NULL) select @id= 1 
set rowcount  0 

в смысле отлавливается только 1 свободный id>0 и проверяется что он вообще существует.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / id / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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