Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ SQL _ Id Identity

Автор: Diana 9:01:2008, 10:43

Всем здрасте!Я использую Sql Server.ID Identity в таблице хочется обновить после того как закончил работать с таблицей.. чтобы оно сново начиналось с 1.Подскажите как это сделать.

Автор: sax_ol 9:01:2008, 11:37

Для: Diana
Не совсем понятно, для чего вам такое, но впрочем вот: DBCC CHECKIDENT

Автор: Diana 9:01:2008, 13:04

Я записала запрос по примеру "DBCC CHECKIDENT (mytable, RESEED, 1)", но ничего не случилось, всё осталось по прежнему

Автор: sax_ol 9:01:2008, 13:13

Для: Diana
И что, молча так, ничего нигде ни написало, или как вы поняли, что всё осталось по прежнему?

Автор: Diana 9:01:2008, 13:21

нумерация не изменилась, с 1 не началась.
вот например у меня есть табличка с 2-мя полями, 1-ое ID,2-ое значение:
2 пар
3 арр
5 енк
6 екн
мне нужен запрос, который начинает опять id с 1:
1 пар
2 арр
3 енк
4 екн

Автор: sax_ol 9:01:2008, 13:42

Цитата(Diana @ 9:01:2008, 15:21 )
мне нужен запрос, который начинает опять id с 1:

где надо, чтоб поменял значение полей на сервере (но смысл в этом??) или на клиенте (а это уже совсем другой вопрос)?
Хотя и в том и в том случае, не вижу необходимости. smile.gif

Автор: Diana 9:01:2008, 17:36

а что есть значение на сервере или на клиенте?в чём различие?короче ситуация такая:у меня БД на сервере в которой id перешёл за 1000,хотя значений не больше 400.за 1000 перешло из-за постоянных добавлений и удалений записей,необходимо что бы последняя запись (id) = не 1000,а действительному числу самих записей,мне это необходимо для дальнейших действий

Автор: sax_ol 9:01:2008, 17:50

Цитата(Diana @ 9:01:2008, 19:36 )
а что есть значение на сервере или на клиенте?в чём различие?

На сервере - значит физически в таблице в соотв. поле на диске ... реальные данные ...
На клиента - грубо говоря то что пользователь видит. А ему можно показать хоть черта лысого, не имеющего отношение к реальным данным. При этом человек будет думать что все ок, и всем хорошо.
Цитата(Diana @ 9:01:2008, 19:36 )
id перешёл за 1000,хотя значений не больше 400.за 1000 перешло из-за постоянных добавлений и удалений записей

Это нормальная ситуация, даже супер нормальная, значит ею пользуются и нужна комуто!
Цитата(Diana @ 9:01:2008, 19:36 )
необходимо что бы последняя запись (id) = не 1000,а действительному числу самих записей,мне это необходимо для дальнейших действий

А вот вы расскажите про эти действия, может и делать то ничего не надо или найдем более "правильный" способ.

Автор: Diana 9:01:2008, 18:01

я вижу 2 выхода:
1-либо тот про каторый я спрашиваю(обновлять id)
2-я могу использовать ф-ю max(id),но последнее максим. значение - 999, а 1000-это для sql уже не max,он эту запись пишет ближе к 1.может как нибудь можно чтобы max значение выдавал 1000

Автор: sax_ol 10:01:2008, 09:09

Для: Diana
Все-таки не могу понять, зачем вам менять эти данные. По сути они служат только для внутренних (технических, целостность данных, связи ...) нужд, и как правило для пользователя недоступны и неинтересны. В своей практике мне никогда этого не приходилось делать.
Плохо конечно, что вы не говорите про саму задачу ...

Автор: European 10:01:2008, 09:38

Цитата(Diana @ 9:01:2008, 19:36 )
необходимо что бы последняя запись (id) = не 1000,а действительному числу самих записей,мне это необходимо для дальнейших действий
*

Это необходимо пользователю? Создайте отдельное поле, в котором будете хранить то значение, которое вам требуется, а Identity не трогайте, так как оно используется для служебный целей. Если этот вариант не приемлем, то уберите Identity и задавайте значения первичного ключа для каждой записи при вставке

Автор: maykoff 11:01:2008, 22:10

Для: European

Цитата
уберите Identity и задавайте значения первичного ключа для каждой записи при вставке

Стоит ли? Ведь можно добавить отдельное поле, в которое вставлять, скажем, нумерацию. А ID - лучше не трогать, это основной индекс таблицы.

Автор: European 14:01:2008, 11:10

Для: maykoff
Ты писатель, а не читатель? Прочти внимательно мой пост

Автор: maykoff 14:01:2008, 12:06

Для: European
Sorry, пропустил как-то.

Автор: Black horse 12:02:2008, 09:55

Грубый вариант:
создаем темповую таблицу с двумя полями id и status_id
вот как-то так

id status_id
1 y
2 y
3 y
4 y
5 n
6 y
... ...
1000 y
по данному примеру - id=5 не используется, значит вставляем нужную запись с этим айдишником, а в темповой таблице меняем статус ид=5.
что типа такого запроса должно подойти:

Код
select id
   into new_id
  from temp
where status_id = 'n'
    and rownum < 1;

Русская версия Invision Power Board (http://www.nulled.ws)
© Invision Power Services (http://www.nulled.ws)