Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Hinamura Member Откуда: Сообщений: 11 |
Доброго дня форумчане! Возникла срочная задача которую ввиду зелености пока не могу самостоятельно решить. SQL2008 Имеется таблица: пусть будет - MUSH состоящая всего из трех столбцов и имеющая 35 записей:
По ошибке в таблицу был внесен пользователь который уже там имелся, теперь эту строку нельзя ни отредактировать ни удалить.Дубликат всего один строка 35 дублируется со строкой 13. Уникального поля по которому хоть как-то можно было идентифицировать нету (столбца id). Подскажите пожалуйста самый простой и рабочий способ. Все найденные мною статью в нете представляли собой монструозные запросы с выборкой множества дубликатов, создания дополнительной таблицы итд. Простого решения подходящего мне я не нашел ( |
9 окт 19, 13:00 [21990317] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
delete a from MUSH a where login = ... and pass = ... and role ... insert MUSH select login = ... , pass = ... , role ... |
9 окт 19, 13:05 [21990323] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2253 |
Hinamura,with cte as ( select *, row_number()over(partition by login /*,pass,role*/ order by (select 1)) as rn from MUSH ) delete from cte where rn > 1 |
9 окт 19, 13:11 [21990330] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Hinamura, delete top (1) ... |
9 окт 19, 13:23 [21990348] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Владислав Колосов, delete top(1) Я так понимаю это запрос удалит самую первую строку в таблице? В моем случае мне нужно удалить 35ю. |
9 окт 19, 13:34 [21990361] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Hinamura, Удалит самую первую строку в таблице, которая удовлетворяет условиям. Условия сами сообразите напиать? |
9 окт 19, 13:35 [21990363] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
самую первую не из таблицы, а из запроса, который вы ограничите условием where. ну если не ограничите - тогда, конечно, первую в таблице... Но лучше воспользуйтесь предложением от court, предварительно проверив, что должно удалиться - для этого замените delete на select * |
||
9 окт 19, 13:36 [21990369] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Гавриленко Сергей Алексеевич, Я не понял вашего ответа. Если я не ошибасю, то с помощью вашего запроса я не смогу удалить строку нужную, т.к. по всем столбцам совпадает с уже имеющейся. |
9 окт 19, 13:40 [21990375] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||||
9 окт 19, 13:40 [21990376] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Господа я полный ноль в написании запросов, предложите рабочий скрипт где нужно ничего исправлять добавлять условия итд. |
9 окт 19, 13:42 [21990380] Ответить | Цитировать Сообщить модератору |
1C Developer Member Откуда: Сообщений: 65 |
Сделайте полный бекап перед операцией и убедитесь, что он рабочий! |
||
9 окт 19, 13:42 [21990382] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
9 окт 19, 13:44 [21990385] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
А DBCC PAGE мне говорит, что есть :) Я согласен с вами, что нельзя однозначно определить, какая строка будет возвращена первой и удалена, но какая-то все равно будет. |
||
9 окт 19, 13:53 [21990399] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Hinamura, написано всё выше delete top (1) from MUSH a where login = ... and pass = ... and role ... |
9 окт 19, 14:01 [21990412] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Владислав Колосов, Ваш скрипт выдает Incorrect syntax near the keyword 'from' |
9 окт 19, 14:15 [21990434] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
SQL2016 Все предложенные варианты выдают синтаксические ошибки |
9 окт 19, 14:23 [21990449] Ответить | Цитировать Сообщить модератору |
ЕвгенийВ Member Откуда: Москва Сообщений: 4962 |
а в ssms никак не удалить? |
9 окт 19, 14:27 [21990456] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
delete top (1) FROM a from #MUSH a where login = 'vasya' |
||
9 окт 19, 14:29 [21990458] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
значит, база в совместимости 80 и ей не светит row_number, а топ только если без скобок. короче, реализуйте вариант Гавриленко, он везде катит |
||
9 окт 19, 14:29 [21990459] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Minamoto, Выдает incorrect syntax near '=' Но на select работает |
9 окт 19, 14:36 [21990465] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Yasha123, База в режиме совместимости sql2008(100) Вариант Гавриленко сыплет ошибками (я с delete пока не тороплюсь правда - вставляю select) Зы. А что, если я руками через ssms руками добавлю столбец еще один с нумерацией, чтобы у дубликата появилось уникальное поле, потом удалю дубликат и после удалю столбец за ненадобностью? |
9 окт 19, 14:41 [21990477] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
set rowcount 1 delete from MUSH where login = ... and pass = ... and role = ... set rowcount 0 |
9 окт 19, 14:43 [21990478] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
invm, он так и пишет - с точками. Не догадывается значения указать. |
9 окт 19, 14:44 [21990481] Ответить | Цитировать Сообщить модератору |
Hinamura Member Откуда: Сообщений: 11 |
Владислав Колосов, Я пишу Set rowcount 1 delete from mush where login = 'vasya' and pass = '1234' and role = 'user' Set rowcount 0 Выдает: incorrect syntax near the keyword 'from' |
9 окт 19, 14:52 [21990497] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Тяжелый случай... Раз буквы в запросе не понятны, их надо взять и выкинуть, так, да? |
9 окт 19, 14:53 [21990500] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |