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

Откуда:
Сообщений: 625
Есть таблица с кол-ом записей около 2 мил. Нужно делать несколько разнородных update:
поменять поле 1 на 1 там где условие 1 = 1
поменять поле 2 на 2 там где условие 2 = 2 ит.д.
Таких пунктов порядка 35, т.к. полей около 200
Все это занимает определенное время.
Можно ли как то все это упростить в плане минимального кол-ва сканов одной и той же таблицы
Курсор не предлагать
16 окт 12, 09:05    [13324089]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
abort,
update t 
set    
    f1 = case when f1=1 then a else b end,
    f2 = case when f2=2 then c else d end,
...
16 окт 12, 09:12    [13324131]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Добрый Э - Эх
Guest
case тебе в помощь, если что...
16 окт 12, 09:13    [13324134]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
какие минимальные сканы
Guest
abort,

ух ты. "миллион" оказывается можно сокращать как "мил". и 200 полей - это не проблема. проблема в другом, ага.
какие минимальные сканы? кривая помойка от начала до конца. хоть как-то работает - уже хорошо.
16 окт 12, 09:22    [13324193]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
abort
Курсор не предлагать
1. Практически нет таких задача где нужен курсор. НЕТУ
2. Не боись кто предложит получит по шапке.
3. Если разные условия отбора/фильтра, то не факт что это эффективно.

Часто видел такое, SELECT INTO во времянку, потом 100500 UPDATE-ов её, а сразу сделать правильный SELECT типа сложно для мозгов.
За такую лень да руки оторвать.
16 окт 12, 09:25    [13324209]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
abort
Member

Откуда:
Сообщений: 625
a MERGE здесь может помочь?
16 окт 12, 09:25    [13324214]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
какие минимальные сканы
200 полей - это не проблема. проблема в другом, ага.
какие минимальные сканы? кривая помойка от начала до конца. хоть как-то работает - уже хорошо.
Однако, системы ERP обычно такую помойку собой и представляют!
Не самодельные - промышленные.
Да ещё и поля таблиц типа "T2345" называются как-нибудь так: "F351274"
16 окт 12, 09:28    [13324233]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Mnior
1. Практически нет таких задача где нужен курсор. НЕТУ
Слишком категорично. ЕСТЬ.
Но мало.
16 окт 12, 09:29    [13324244]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
какие минимальные сканы
кривая помойка от начала до конца. хоть как-то работает - уже хорошо.
Если у кого-то море времени, то пусть не просиживает штаны, а учится на ошибках, не надо отговаривать человека исправлять говнокод.
Таких отговорунов вешают за кое что.

Нужно не отрицать критикой, а подталкивать хорошими советами. (не берите пример с меня )

Да, оптимизацию нужно делать сверху вниз. И только так.
Но иногда, чтобы что-то исправить "наверху", нужно и "внизу" чуть-чуть поправить.
16 окт 12, 09:30    [13324259]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
abort
a MERGE здесь может помочь?
MERGE может одновременно включать в себя и DELETE, и INSERT, и UPDATE.
Здесь-то это зачем? Тем более уже ответили.
16 окт 12, 09:31    [13324265]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
iap
Mnior
1. Практически нет таких задача где нужен курсор. НЕТУ
Слишком категорично. ЕСТЬ.
Но мало.
Что, вы не можете подыграть?
На столько мало и редко что не каждому дано увидеть и не стоит ради этих мало давать шанс кому-то думать, что мало это - 49%, 10%, 1%, 0.01%.
Ибо в 99.999% случаев использования курсора он не нужен, и был использован из-за глупости.

Говорите что он нужен только тогда когда он реально нужен. В остальных лучше говорить - не нужен никогда. Это первое.

Второе. Он не нужен никогда в 100%. Ибо в тех случаях он тупо вынужден из-за какой-то гадости, как костыль и обходной вариант.
И пусть разрабы исправляют недочёты.
16 окт 12, 09:39    [13324291]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
iap
abort
a MERGE здесь может помочь?
MERGE может одновременно включать в себя и DELETE, и INSERT, и UPDATE.
Здесь-то это зачем? Тем более уже ответили.


Попробуй все таки MERGE. У меня на практике намного быстрее UPDATE работает )
16 окт 12, 12:33    [13325740]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли как то упростить несколько десятков операций UPDATE в одну  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Алексей Куренков
Попробуй все таки MERGE. У меня на практике намного быстрее UPDATE работает )
Сразу видно дилетанта.

abort, не слушайте его.
16 окт 12, 12:36    [13325777]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить