Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите начинающему (начал день назад) / 4 сообщений из 4, страница 1 из 1
26.08.2002, 20:49:22
    #32045977
KleFF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите начинающему (начал день назад)
Заполняю таблицу, программа присваивает каждому пункту свой идентификатор. Где он хранится? Как его можно заменить? Мне нужно чтобы при добавлении новой записи программа искала бы отсутствующий номер, присваивала его этой записи. Типа 1-иванов,2-петров, 4-сидоров (3-таранов было удалено). Дабовляю новую запись (козлов), она естественно присваивает ей 5-ый номер, а мне надо чтобы третий?. Вроде объяснил. ..... Как сделать?
Если можно, то попонятнее.
...
Рейтинг: 0 / 0
26.08.2002, 21:54:42
    #32045981
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите начинающему (начал день назад)
Что вроде такого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare @myid int
create table #temp1(f1 int)

insert into #temp1 values( 1 )
insert into #temp1 values( 2 )
insert into #temp1 values( 4 )
insert into #temp1 values( 5 )
 --insert into #temp1 values(7)
 
 --insert into #temp1 values(8)
 
insert into #temp1 values( 10 )

 /*All "missed" ID's */ 
select a.f1+ 1 
from #temp1 a 
left outer join #temp1 b on (b.f1) = (a.f1+ 1 )
where b.f1 is null

 /* First "free" id */ 
select top  1  @myid = a.f1
from #temp1 a 
left outer join #temp1 b on (b.f1) = (a.f1+ 1 )
where b.f1 is null
order by a.f1

select ISNULL(@myid,  0 ) +  1 
drop table #temp1


Только подумайте хорошенько, прежде чем использовать заполнение "пропусков" в нумерации. Поскольку данные запросы придется запускать с блокировкой таблицы, чтобы при множественных конкуретных запросах пока один коннект ищит "свободный" номер это номер не оказался на момент собственно добавления записи в таблицу(INSERT) уже добавленным но из другиго коннекта.
...
Рейтинг: 0 / 0
26.08.2002, 21:56:01
    #32045983
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите начинающему (начал день назад)
Уважаемый KleFF.
Данное значение хранится в автоинкременентном поле. Его признак - наличие птицы в колонке identity (режим design table в Enterprise Manager).
Пока не трогайте его! Вы научитесь его изменять примерно чрез три недели, когда у Вас уже будет некоторый опыт. Пускай себе оно само добавляется! Это гарантирует уникальность первичного ключа. Ведь возможно, что Вы удалите запись с ID=5, заведете новую, с тем же ID, а где-то в недрах базы сохранятся записи для ID=5, и получите Вы полную муру.

Однако возможны и другие случаи. Предположим, Вы пишите базу для учета Основных Средств. Там принято давать единицам учета шестизначные инвентарные номера, и народу удобнее давать новым поступлениям номера выбывших единиц. В этом случае рогом упираться нельзя. Хочет пользователь повторное использование - он должен его получить. Толко вот автоинкременент не трогайте. Завдите два поля - одно автоинкременентное, для внутреннего использования, а другое, красивое, юзеру показывайте.
А запрос для поиска наименьшего "свободного" значения выглядит примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
set nocount on
declare @i int
create table test (i int)
set @i= 0 
while @i< 10 
begin
insert into test values (@i)
set @i=@i+ 1 
end
delete from test where i= 5 
 /********************************************/ 
select min(i)+ 1  from test
where (i+ 1 ) not in (select * from test)
 /********************************************/ 
drop table test
...
Рейтинг: 0 / 0
26.08.2002, 23:00:21
    #32045987
ViktAS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите начинающему (начал день назад)
Под счастливой звездой ты, паря, родился, если на твой вопрос ответили Glory и Cat2
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите начинающему (начал день назад) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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