|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть жирная таблица с четырьмя полями. Все они добавлены в ключ. Скрипт создания таблицы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Версия сервера на всякий случай Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor) Необходимо изменить значение в одном из полей . При этом, если при изменении подразумевается дублирование , то эту строку , в которой пытаемся изменить, нужно удалить (ведь подразумеваемый набор значений во всех полях уже есть). Пытаюсь пока делать обычный запрос, Код: sql 1. 2. 3. 4. 5. 6. 7.
но, как и ожидалось, получаю ошибку: текст ошибкиViolation of PRIMARY KEY constraint 'PK_PartnerAnalogs_test'. Cannot insert duplicate key in object 'dbo.PartnerAnalogs_test'. The duplicate key value is (TOYOTA, 43215-P0100, NISSAN, 43215-52L60). Возможно ли вообще выполнить это задание? На первый взгляд, оно не относится уж к таким редким, ИМХО... Пытался смотреть в сторону Merge, но в данном случае не знаю можно ли его использовать. Уже перекурил кучу информации, сильным спецом в SQL себя пока не считаю, разве что поверхностным. Но вот нужно выполнить такую задачу. З.Ы. Параллельно стоит задача удалить из полей различные специальные символы и пробелы, но, я так полагаю, что с этой задачей вторая явно пересекается... :) З.З.Ы. Буду рад любым идеям. Сильно не пинайте по возможности. Заранее благодарю откликнувшихся... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 16:51 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik На первый взгляд, оно не относится уж к таким редким Обычно, если надо обновить поле, являющееся ключом, то уже что-то пошло не так или неправильно спроектировано. Ключ на все поля - это печально. Не делайте так. Один из вариантов решения - сгенерите времянку со старым и новым значениями. Потом проверьте "дубли" и удалите их. А оставшимся обновите. Для консистентности - в одной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 16:59 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Ключ на все поля - это печально. Не делайте так. Условия уже есть, надо выполнить задачу. Ключи по всем полям, видимо, делали для уникальности значений в каждой строке... Один из вариантов решения - сгенерите времянку со старым и новым значениями. Потом проверьте "дубли" и удалите их. А оставшимся обновите. Для консистентности - в одной транзакции. Я извиняюсь, но, если не сложно, можно подробней. Я не силен в скульном диалекте и в SQL тоже. К сожалению, и надеюсь, что пока. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:34 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Если по-простому, то if exists (select * from T where ...=@new) then delete from T where ...=@old else update set ..=@new where ...=@old Если по сложному, то merge ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:52 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Я вообще что-то не вкурил. Если ключ по всем полям (допустим их два) и у меня есть запись {"foo", "bar"}, то нужно при добавлении записи {"foo", "bar"} ту запись {"foo", "bar"}, которая уже есть удалить, что ли? Смысл какой? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:55 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
godsql Если по-простому, то... Подозреваю, что будет очень долго. Если по сложному, то merge А вот с Merge я пытался, но так у меня ничего и не получилось сделать. Думаю. что этот способ должен быть быстрее на такой жирной таблице... Был бы рад примерам... Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:57 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Был бы рад примерам Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:02 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Необходимо изменить значение в одном из полей . При этом, если при изменении подразумевается дублирование , то эту строку , в которой пытаемся изменить, нужно удалить (ведь подразумеваемый набор значений во всех полях уже есть). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:06 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
fkthat Я вообще что-то не вкурил. Если ключ по всем полям (допустим их два) и у меня есть запись {"foo", "bar"}, то нужно при добавлении записи {"foo", "bar"} ту запись {"foo", "bar"}, которая уже есть удалить, что ли? Смысл какой? Смысл в изменении . Если есть записи: brandarticlea_branda_articleMITSUBISHI125MITSUBISHIMD312639BOSCH0 092 S40 260BOSCH0092S40260BOSCH0 092 S40 260VARTA5704120633132BOSCH0 242 129 515CHAMPIONOE201/T10BOSCH125MITSUBISHIMD312639 И я хочу изменить значения в поле brand с MITSUBISHI на BOSCH, то возникнет ошибка. Ибо изменяемая первая строка будет после изменения идентична последней. В таком случае я хотел, чтобы первая строка была просто удалена ибо результат изменения уже есть в базе... Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:07 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
PaulYoung SerPaNik Необходимо изменить значение в одном из полей . При этом, если при изменении подразумевается дублирование , то эту строку , в которой пытаемся изменить, нужно удалить (ведь подразумеваемый набор значений во всех полях уже есть). Не запись есть, а такое сочетание значения полей. Но мы же в другой строке меняем, вот ее и удалить... Ключи ведь по всем полям... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:09 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik PaulYoung пропущено... Похоже, что нужно просто ничего не делать в этом случае, ведь сами же пишете, что такая запись уже есть в вашей таблице и дублей быть не должно. Не запись есть, а такое сочетание значения полей. Но мы же в другой строке меняем, вот ее и удалить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:12 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Надо добавить нормальное уникальное поле, сделать его первичным ключом, в триггере AFTER UPDATE удалить записи с задублированными полями с не минимальным первичным ключом. Ведь я могу проапдейтить зараз 100500 записей, после чего получится сто тыщ записей с одинаковыми значениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:26 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Не запись есть, а такое сочетание значения полей. Но мы же в другой строке меняем, вот ее и удалить... Ключи ведь по всем полям... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:29 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm Ответов не читаем? Конечно читаем. Я просто пока отвечаю на одно, не вижу, что пришел ответ. Ваш проверяю и пытаюсь понять смысл, чтобы разобраться. С учетом моих скудных знаний. :) В любом случае спасибо... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:33 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
PaulYoung, Логика в том, что криво добавили записи из CSV. Поэтому приходиться подчищать. Но это в моем случае. И в чем плоха логика и изменить на нужные значения поля в строке и при этом избежать дублирования (т.е. ошибок в моем случае с ключами по всем полям)? При изменении значения, если дубля не предполагается, то изменить, а если дубль после изменения предполагается, то удалить изменяемую, потому что аналогичная уже есть. Вроде логика нормальная... З.Ы. Это таблица аналогов запчастей. т.е. производитель, артикул, производитель аналога, и артикул аналога. Может эта информация поможет понять, почему я так думал сделать... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:38 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, у вас в CSV "сырые" данные? а каталог запчастей нормализован и хранится отдельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:44 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
PaulYoung, я пытаюсь помочь исправить ситуацию на данный момент. В csv прислали данные, которые нужно было загрузить. Корректность их никто не проверял. Так и загрузили. Теперь нужно исправить ситуацию. Но эта инфа ведь не относится к сабжу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:52 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm, Большущее Вам спасибо! Проверил. То, что нужно! З.Ы. Тут нет системы плюсиков насколько я понял. Так бы с огромным удовольствием "влепил" бы за помощь! :) Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 19:00 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Не хочу создавать новую тему, но как в моем случае очистить все значения в поле от различных символов? Например, -()*;'@ и т.д. Операция изменения проходит нормально, спасибо еще раз. А вот какой запустить скрипт, чтобы очистил от этих спецсимволов и пробелов все значения в определенном поле например? Хорошо бы, если бы множество этих символов можно было задать. Напоминаю, в моем случае составной ключ по всем полям и опять же надо избежать ошибки дублирования... Забыл сказать спасибо так же godsql за код. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 12:52 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, К сожалению, нормальный translate в sql server не завезли, но можно так. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 14:04 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Пример. #T - таблица со строками, @CharsForErase - строка с символами, которые надо удалить из всех строк. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Вместо master.dbo.spt_values годится любой источник достаточного количества целых чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 15:13 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
env, спасибо. попробую проверить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 16:36 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
iap, спасибо, вот тут нужно будет мне больше времени, чтобы понять. А еще как сделать так, чтобы и ошибок на ключ не возникало :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 16:38 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
env, Хорошо чистит, еще раз спасибо. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 18:01 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Пытаюсь срастить запрос изменения с обходом ошибки ключа со строкой удаления спецсимоволов. Код: sql 1. 2. 3. 4. 5. 6. 7.
Синтаксис вроде правильный, но выскакивает ошибка при выполнении: "Invalid column name 'brand'" З.Ы. Напомню. С SQL пока разговариваю на жестах... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 18:36 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Подскажите, плиз, что я делаю не так? :( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 13:30 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik fkthat Я вообще что-то не вкурил. Если ключ по всем полям (допустим их два) и у меня есть запись {"foo", "bar"}, то нужно при добавлении записи {"foo", "bar"} ту запись {"foo", "bar"}, которая уже есть удалить, что ли? Смысл какой? Смысл в изменении . Если есть записи: brandarticlea_branda_articleMITSUBISHI125MITSUBISHIMD312639BOSCH0 092 S40 260BOSCH0092S40260BOSCH0 092 S40 260VARTA5704120633132BOSCH0 242 129 515CHAMPIONOE201/T10BOSCH125MITSUBISHIMD312639 И я хочу изменить значения в поле brand с MITSUBISHI на BOSCH, то возникнет ошибка. Ибо изменяемая первая строка будет после изменения идентична последней. В таком случае я хотел, чтобы первая строка была просто удалена ибо результат изменения уже есть в базе... Как-то так. Не пойму я ваших заморочек! Почему просто перед апдейтом не попытаться удалить строку, которую пытаетесь переделать? В вашем случае все равно её больше не будет в базе. Так? Потом проверить, а есть-ли уже новая строка в таблице. Если есть, то ничего не делать, если нет, то добавить. В вашем случае это Удаляем brandarticlea_branda_articleMITSUBISHI125MITSUBISHIMD312639 И смотрим наличие brandarticlea_branda_articleBOSCH125MITSUBISHIMD312639 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 22:29 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 22:46 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SQL2008, почему же заморочки? А если в результате переименования будет 4 одинаковых строки? Да и с Вашим подходом сначала удалить, а потом, если нет добавить как-то не шустро будет работать с таблицей в более четверти миллиарда строк... ИМХО. Да и этот вопрос уже решен. Я уже заменил значения в 300 млн строк по двум полям. Я уже благодарил человека за неоценимо оказанную помощь. Сейчас мне нужно сделать так, чтобы убрать различные символы, которые попали в названия (пробел, дефис, скобки и т.д.), но чтобы не возникало матюка по поводу дубликата ключа. Если в решении мы знали что и на что меняем, то здесь не совсем. Я еще раз напомню, я специалист не по SQL. Именно поэтому решил обратиться в этом форуме к более знающим по этой теме людям... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 22:52 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik А если в результате переименования будет 4 одинаковых строки? Как это так может получиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 22:55 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Да и с Вашим подходом сначала удалить, а потом, если нет добавить как-то не шустро будет работать с таблицей в более четверти миллиарда строк... ИМХО. А LEFT JOIN по 4 полям без WHERE прямо взлетит? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 23:01 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SQL2008, ниже может встретиться такая же строка... О чем мы говорим, уже решено. Сам подход сначала удалять, а потом искать и сравнивать, ИМХО, не совсем правильный. Может ошибаюсь, может в SQL это принято. А так получается, что проходя каждую строку Вы ее сначала удаляете, а потом еще и ищете. Это разве не иррациональное решение? А я спрашиваю по поводу уже другой задачи... Как удалить определенные символы, прекрасно удаляется (для моего случая) предложенный выше мне хорошим человеком вариант: Код: sql 1.
Вот я и хочу использовать для решения своей уже второй задачи... Но не знаю как. :( З.Ы. Да, по поводу нескольких строк я не прав. Соглашусь. Но суть не в этом. Я не хочу спорить, прекрасно осознавая, что не силен в SQL (иначе не обратился бы сюда). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 23:04 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik SQL2008, ниже может встретиться такая же строка... О чем мы говорим, уже решено. Сам подход сначала удалять, а потом искать и сравнивать, ИМХО, не совсем правильный. Может ошибаюсь, может в SQL это принято. А так получается, что проходя каждую строку Вы ее сначала удаляете, а потом еще и ищете. Это разве не иррациональное решение? А я спрашиваю по поводу уже другой задачи... Как удалить определенные символы, прекрасно удаляется (для моего случая) предложенный выше мне хорошим человеком вариант: Код: sql 1.
Вот я и хочу использовать для решения своей уже второй задачи... Но не знаю как. :( З.Ы. Да, по поводу нескольких строк я не прав. Соглашусь. Но суть не в этом. Я не хочу спорить, прекрасно осознавая, что не силен в SQL (иначе не обратился бы сюда). Можно просто сначала удалить, а потом попытаться вставить - ключ просто не даст вставить, если такая же запись уже есть. Надо будет только ошибку нарушения constraint при этом обработать ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 23:39 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
fkthat Можно просто сначала удалить, а потом попытаться вставить - ключ просто не даст вставить, если такая же запись уже есть. Надо будет только ошибку нарушения constraint при этом обработать Я просто не знаю как здесь обрабатываются ошибки исключением, чтобы выполнение потом продолжилось. Пробовал использовать try - catch, но у меня при ошибке попадает в исключение, выдается ошибка и процесс останавливается. В иных системах есть обработка исключений с возможностью продолжить код программы. Здесь я не знаю как это сделать и можно ли. Я вообще думал, что опять можно применить Merge, мне эта конструкция нравится, но я не достаточно хорошо ее изучил. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 00:22 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Сам подход сначала удалять, а потом искать и сравнивать, ИМХО, не совсем правильный. Правильный тот метод который работает быстро и без ошибок. Все остальное софистика. Если ваш способ вас устраивает, то используйте его. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 09:49 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Здесь я не знаю как это сделать и можно ли. Закоммитить ошибочную транзакцию не получится никоим образом! Поэтому постарайтесь избегать исключений. SerPaNikможно применить Merge, мне эта конструкция нравится, но я не достаточно хорошо ее изучил. :) Я бы вам посоветовал потратить немного времени, изучить и использовать именно штатные функции SQL. Если вы работает с большими объемами, то именно их, оптимизированных на уровне движка, следует использовать для улучшение быстродействия. Прошу извинить за банальные истины. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 09:57 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Подскажите, плиз, что я делаю не так? :( 1. SerPaNik Код: sql 1.
2. Запросом в CTE вы просто соединили таблицу саму с собой. Что дальше с этим собираетесь делать? 3. Очищать данные нужно ранее в CTE, а не в using ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 11:57 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm Выделенное это по-вашему что? 2. Запросом в CTE вы просто соединили таблицу саму с собой. Что дальше с этим собираетесь делать? 3. Очищать данные нужно ранее в CTE, а не в using Пока только создал запрос, чтобы во втором столбце было Нулл, если необходимо изменение. Код: sql 1. 2. 3. 4.
Но правильным ли я путем иду, не знаю. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 14:54 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Вы лучше напишите какие столбцы нужно очистить от мусора и что потом удалять. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:07 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm SerPaNik, Вы лучше напишите какие столбцы нужно очистить от мусора и что потом удалять. Сама конструкция Код: sql 1.
удаляет ненужные символы. Как связать Ваш вариант с этой конструкцией я пока не могу понять. Может и другое решение есть, но я тоже его не знаю. З.Ы. В Вашем варианте я хотел использовать еще один параметр, например, @Pole, чтобы в нем имя поля хранилось Код: sql 1.
, но не нашел как подставить значение из этого параметра, например, в строку b.article = a.article b.@Pole=a.@Pole не прокатывает. :) Но это так, я уже хотел сделать более универсальный код... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 18:15 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Так чего с дублями-то делать, если нашли? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:55 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm SerPaNik, Так чего с дублями-то делать, если нашли? Удалять. Как и в Вашем решении. Именно с дублями и проблема. Так бы можно было UpDate использовать. А ключ, напомню, по всем четырем полям. Исходные данные не изменились, а вот задача изменилась. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:15 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 22:12 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm SerPaNik, Как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Что-то не воспринимает второй when matched почему-то... я так понимаю Ошибка: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 22:29 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Код: sql 1. 2. 3. 4. 5. 6. 7.
а так ? Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 23:50 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Что-то не воспринимает второй when matched почему-то... я так понимаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 09:26 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm SerPaNik Что-то не воспринимает второй when matched почему-то... я так понимаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: sql 1. 2.
Я отдельно выполнил селект, чтобы получить таблицу Т. Почему-то для этого кода rn = 1 для всех трех записей. Матюк идет на этот артикул. Есть еще поле a_article, которое потом тоже надо будет очистить от спецсимволов. Может поэтому так получается... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 13:44 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
Обнаружил, что в таблице Т есть только одна запись с артикулом 8521468020, в таблице есть две записи, одна уже с таким артикулом, а вторая будет с ним после удаления знаков... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 14:33 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Думаете интересно гадать что за запрос и на каких данных вы выполняете? Давайте скрипт создания таблицы и заполнения ее данными. И выполняемый запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 16:09 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SQL2008 SerPaNik Здесь я не знаю как это сделать и можно ли. Закоммитить ошибочную транзакцию не получится никоим образом! Поэтому постарайтесь избегать исключений. Можно использовать IGNORE_DUP_KEY - тогда попытка вставки с нарушением ключа будет просто проигнорирована. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 17:07 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm SerPaNik, Давайте скрипт создания таблицы и заполнения ее данными. И выполняемый запрос. Скрипт создания таблицы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Скрипт для заполнения таблицы Код: sql 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. 28. 29. 30. 31. 32. 33.
Скрипт, который запускаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Спасибо, что мучитесь с нубом в SQL :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 17:32 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik Спасибо, что мучитесь с нубом в SQL :-) Кто никогда не был нубом пусть первый перечислит мне 100 рублей на карту. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:02 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SQL2008 пусть первый перечислит мне 100 рублей на карту А constraint как реализован, который будет отбивать начисления начиная со второго? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:12 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SQL2008 Кто никогда не был нубом пусть первый перечислит мне 100 рублей на карту. Просто здесь, полагаю, люди, которые изучают этот вопрос. Мне же в данный момент нужно решить две задачи. Обращаться я уже буду по ADO к серваку и выполнять эти задачи из другой программы, если нужно, конечно, будет. А так в Студио запустил скрипт, почистил, изменил что надо и бд готова к дальнейшей работе. Не факт, что я в ближайшем будущем обращусь сюда за помощью после решения этих двух задач. Поэтому и понимаю людей, которые помогают такому как я. За что и благодарен. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:14 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:35 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
invm, еще раз огромное спасибо! . Вроде делает то, что надо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 18:56 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
появилась мысль, но не знаю можно ли тут так. Если объявить переменную Код: sql 1. 2.
Можно ли потом как-то вставить её значение в строку, к примеру: Код: sql 1.
чтобы получилось типа Код: sql 1.
Или здесь так нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 19:12 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik, видимо, нельзя :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 01:02 |
|
Составной ключ по всем полям. При Update, если будет дубль, то удалить исходную строку
|
|||
---|---|---|---|
#18+
SerPaNik SerPaNik, видимо, нельзя :) ("склеить" строку запроса в строковую переменную, да и выполнить через exec(@sql) ) но не нужно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 01:07 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1685377]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
112ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 506ms |
0 / 0 |