Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите корректно удалить дублирующуюся строку  [new]
Trorg
Member

Откуда:
Сообщений: 5
При проверке DBCC CHECKDB ('MyBase', REPAIR_REBUILD) вышла ошибка:
Msg 1505, Level 16, State 1, Line 1
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name
'dbo._AccTtl36047' and the index name '_AccTt36047_ByPeriod_TRRRRRRN'. The duplicate key value is (Dec 1 2008 12:00AM, 0xa36f5219f3882d59474c2b8df0e06657, 0xa6c70015170f692c11ddb54602f0cb7b, 0x08, 0x0000001f, 0x9ec60015170f692c11dcb90c762f09fc, 0x08, 0x0000008b, 0x9a8a0015170f692c11dce51016704f2e, 0x08, 0x00000033,
0x90320015170f692c11dc9c1210b5d583, <NULL>, 0).
*************
DBCC results for '_AccTtl36047'.
Msg 8945, Level 16, State 1, Line 1
Table error: Object ID 1151343166, index ID 1 will be rebuilt. Could not repair this error.
Msg 2511, Level 16, State 1, Line 1
Table error: Object ID 1151343166, index ID 1, partition ID 72057594041663488, alloc unit ID 72057594045661184 (type In-row data). Keys out of order on page (1:7905584), slots 8 and 9.
The error has been repaired.
Msg 2511, Level 16, State 2, Line 1
Table error: Object ID 1151343166, index ID 1, partition ID 72057594041663488, alloc unit ID 72057594045661184 (type In-row data). Keys out of order on page (1:7906015), slots 20 and 21.
The error has been repaired.
There are 12081940 rows in 447483 pages for object "_AccTtl36047".
CHECKDB found 0 allocation errors and 2 consistency errors in table '_AccTtl36047' (object ID 1151343166).
CHECKDB fixed 0 allocation errors and 2 consistency errors in table '_AccTtl36047' (object ID 1151343166).

Нашел 2 одинаковых строки в 'dbo._AccTtl36047' через скрипт:SELECT * FROM [MyBase].[dbo].[_AccTtl36047] where _Period='2008-12-01 00:00:00.000' and _AccountRRef = 0xa36f5219f3882d59474c2b8df0e06657 and _Value1_RRRef = 0x9ec60015170f692c11dcb90c762f09fc and _Value2_RRRef = 0x9a8a0015170f692c11dce51016704f2e and _Value3_RRRef = 0x90320015170f692c11dc9c1210b5d583 and _Fld6028 = 0.
Правильно ли я понял, что надо удалить вторую одинаковую строку в 'dbo._AccTtl36047'? Как корректно удалить вторую строку? Возможно ли, что при удалении строки удалятся какие-то данные по ссылкам на удаляемую строку? И что надо делать с index name '_AccTt36047_ByPeriod_TRRRRRRN'? Прошу помощи.
10 июл 09, 11:55    [7401019]     Ответить | Цитировать Сообщить модератору
 Re: Помогите корректно удалить дублирующуюся строку  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Ну, индекс то у Вас поличился.

автор
The error has been repaired.


автор
Как корректно удалить вторую строку?


Преобразуйте Ваш запрос в DELETE TOP 1 ...

автор
Возможно ли, что при удалении строки удалятся какие-то данные по ссылкам на удаляемую строку?


Если настроены каскадные удаления, то могут. Только о каких полях идет речь, если Вы строите уникальный индекс по такой куче полей?!
10 июл 09, 12:01    [7401072]     Ответить | Цитировать Сообщить модератору
 Re: Помогите корректно удалить дублирующуюся строку  [new]
Trorg
Member

Откуда:
Сообщений: 5
SQL 2005. Как определить, есть ли каскадные удаления у этой таблицы?
При повторной проверке снова эти же ошибки выходят. Видимо индекс не пересоздается из-за дублирующихся строк.
10 июл 09, 12:07    [7401138]     Ответить | Цитировать Сообщить модератору
 Re: Помогите корректно удалить дублирующуюся строку  [new]
aleks2
Guest
Trorg,

А вы не удаляйте - измените, обеспечив уникальность. Потом будете думать: шо с этим делать?
10 июл 09, 12:22    [7401255]     Ответить | Цитировать Сообщить модератору
 Re: Помогите корректно удалить дублирующуюся строку  [new]
pacha
Member

Откуда:
Сообщений: 239
Сгруппируйте по всем полям индекса и используйте having count(*) > 1. Так узнаете дублирующиеся записи. Потом решайте что с ними делать
10 июл 09, 12:26    [7401278]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить