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

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

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

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


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