Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Индексы  [new]
SerjInsane
Member

Откуда:
Сообщений: 30
если в таблице имеется поле ID которое индексируется, можно ли запрос на удаление какой-нибудь строки реализовать так, чтобы в результате все индексы поля ID пересчитывались и оставались по порядку?
15 окт 13, 20:17    [14975493]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Какие индексы, какого поля и по какому еще такому порядку? O_o
15 окт 13, 20:28    [14975524]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Мне кажется вы не понимаете что такое таблица и индекс.

Что такое "индексы поля ID"? У полей нет индексов. Есть индексы по полям, притом есть как включённые в ключ, так и нет, как явно так и не явно.
Что такое "индексы пересчитывались"?
Что такое "индексы оставались по порядку"? Индексы меж собой разве как-то упорядочены?
А данные по ключу индекса всегда упорядочены - на то он и индекс.

И как это при удалении что-то перестаёт быть упорядоченным?
15 окт 13, 20:29    [14975530]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
SerjInsane,

Отсутствие "дырок" в нумерации что ли нужно?
15 окт 13, 20:34    [14975552]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
invm, пилять 100%
Жаргонизм (термины) ослепляэ
15 окт 13, 21:00    [14975657]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Oh, shi... /facepalm
15 окт 13, 21:02    [14975666]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34697
Вот я удивляюсь, как народ не может просто отвечать на поставленные вопросы.
Человек же ясно спрашивает:

SerjInsane
можно ли запрос на удаление какой-нибудь строки реализовать так, чтобы в результате все индексы поля ID пересчитывались и оставались по порядку?


А я вот отвечу коротко и ясно: "МОЖНО".
16 окт 13, 01:04    [14976805]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
invm — маэстро телепатии :)
16 окт 13, 09:47    [14978080]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
SerjInsane
Member

Откуда:
Сообщений: 30
извините за плохо сформулированный вопрос. да, я плохо разбираюсь и у многих видимо это вызвало негодование. постараюсь объяснить по другому и наверное так все смогут понять. у поля ID есть свойство Identity, инкрементируемое при каждом добавлении новой строки. и действительно, как уже понял меня invm, я хотел спросить, можно ли осуществить отсутствие "дырок" в нумерации и как?

invm
SerjInsane,

Отсутствие "дырок" в нумерации что ли нужно?


Гость333
invm — маэстро телепатии :)

это точно)
16 окт 13, 10:34    [14978336]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
SerjInsane
можно ли осуществить отсутствие "дырок" в нумерации и как?
Это потребовалось исходя только из эстетических соображений?
16 окт 13, 10:52    [14978450]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Если заморочиться, то можно всё.
Отключить инкрементацию, вставить какие надо значения, вернуть инкрементацию. Либо вообще не пользоваться встроеной инкрементацией, а реализовать свою (как в Firebirde, например).
16 окт 13, 10:53    [14978462]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
SerjInsane
извините за плохо сформулированный вопрос. да, я плохо разбираюсь и у многих видимо это вызвало негодование. постараюсь объяснить по другому и наверное так все смогут понять. у поля ID есть свойство Identity, инкрементируемое при каждом добавлении новой строки. и действительно, как уже понял меня invm, я хотел спросить, можно ли осуществить отсутствие "дырок" в нумерации и как?

Осуществить, конечно, можно. Но это дополнительный код, который будет только тормозить систему. Действительно ли Вам это нужно?
16 окт 13, 10:54    [14978465]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
SerjInsane,
Тут можно почитать.
И тут тоже.

Но я бы на вашем месте не баловался с CheckIdent.

Сообщение было отредактировано: 16 окт 13, 10:57
16 окт 13, 10:56    [14978482]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Да чо за хрень)
Ссылка на Identity_insert
16 окт 13, 10:57    [14978491]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Что касается поиска свободных номеров, то вот хранимка (ни в коем случае не поддерживаю такие извращения, но так уж исторически сложилось)

ALTER Procedure [dbo].[spGetDirka]
@OutVal Int = 0 OutPut, -- номер найденной минимальной дырки
@FrstKod Int = 1 -- с какого номера начинать поиск
AS
select top 1 @OutVal=KodRec+1
From Clients s1
Where kodrec>@FrstKod
and not exists (select * from Clients s2 where s2.KodRec=s1.KodRec+1)
Order By KodRec
16 окт 13, 10:58    [14978496]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
invm
SerjInsane
можно ли осуществить отсутствие "дырок" в нумерации и как?
Это потребовалось исходя только из эстетических соображений?


скорее из "эротических"
16 окт 13, 11:03    [14978538]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Wovan2, бывают ситуации, когда это реально нужно. Как уже выше написали - DBCC CHECKIDENT.
http://technet.microsoft.com/ru-ru/library/ms176057.aspx
И лучше, чтобы название тему соответствовало проблеме описанной в ней.
16 окт 13, 11:04    [14978545]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр52
Wovan2, бывают ситуации, когда это реально нужно.

Опишите такую ситуацию, очень интересно.
16 окт 13, 11:20    [14978655]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Гость333
Александр52
Wovan2, бывают ситуации, когда это реально нужно.

Опишите такую ситуацию, очень интересно.


Таблица, в нее идет сливка из 2-х источников
1 источник:
ID в диапазон от 1 до 1000000
2 источник:
ID в диапазон от 1000000 и более
Например от массовых вставок и удалений диапазон на 1 источнике вырос за пределы 1000000.
Поэтому становится невозможным определить откуда пришли данные и нужно скинуть Identity.

Не говорю что эта ситуация правильная. Но она вполне может быть.
16 окт 13, 11:26    [14978692]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр52,

А, ну то есть вы какую-то свою ситуацию имели в виду.
ТС желает, чтобы при "удалении какой-нибудь строки ... все индексы значения поля ID пересчитывались и оставались по порядку" — применять такое решение для разруливания описанной вами ситуации было бы несколько... эээ... экзотично.
16 окт 13, 11:40    [14978822]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
MX_User
Member

Откуда:
Сообщений: 27
ID - поле в таблице [Таблица], которое надо обновить
WITH rnTable (ID, RN) as (
Select ID, ROW_NUMBER() OVER (ORDER BY ID) as RN from [таблица])
UPDATE rnTable SET ID = rn
16 окт 13, 15:10    [14980580]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MX_User,

Угу, только значение identity-поля обновлять нельзя, будет выдана ошибка 8102 Cannot update identity column 'ID'.
16 окт 13, 15:13    [14980628]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
MX_User
Member

Откуда:
Сообщений: 27
Гость333,
SET IDENTITY_INSERT
16 окт 13, 15:19    [14980679]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
Glory
Member

Откуда:
Сообщений: 104751
MX_User
Гость333,
SET IDENTITY_INSERT

Это все равно не поможет изменить уже существующие значения
16 окт 13, 15:21    [14980699]     Ответить | Цитировать Сообщить модератору
 Re: Индексы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
MX_User
Гость333,
SET IDENTITY_INSERT
Не сработает.

Единственный вариант: создать новую таблицу, перелить данные с новым идентити, удалить старую таблицу.
Ну или какой нибуть подобный вариант с переливкой в новую таблицу.
16 окт 13, 15:23    [14980715]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить