Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UpdateOrInsert in MS SQL 
:(
    Опции темы
Vitek1234
Дата 8.12.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Для Mysql я могу просто на основании значения полей генерировать запрос для вставки или обновления(в случае если такова есть) записей таблиц с помощью  ON DUPLICATE KEY UPDATE

в Java получаеть что-то такое 

Код

   public void executeInsertMySQLSql(String table, String field, String updateField, List<String> vistaResult) throws SQLException {
        Statement stmt = conn.createStatement();
        for (String string : vistaResult) {
            String sqlExpression = "INSERT INTO " + table + "(" + field + ") VALUES" + string;
            if ((updateField != null) && (updateField.length() > 0)) {
                sqlExpression = sqlExpression + " ON DUPLICATE KEY UPDATE ";
                for (String fd : updateField.split(",")) {
                    sqlExpression = sqlExpression + fd + "=VALUES(" + fd + "),";
                }
                sqlExpression = sqlExpression.substring(0, sqlExpression.length() - 1);//delete last symbol
            }
            stmt.execute(sqlExpression);
        }
    }


Для MSQL в MYSQL:2008 есть что-то подобное MERGE, также можна использовать  IF 
Код

if exists
(Select
ien from cpt 
where ien = '10022')
update cpt
set cpt_code='10023'
else 
insert into cpt(ien,cpt_code)
values ('10022','10023')


Но каждая таблица может содержать ключ с несколькими полями, и вот тепер я даже не знаю как же сделать лучше??? Придётся передавать в метод также и keyNames и keyValues. Но это геморрр... 

Это сообщение отредактировал(а) Vitek1234 - 8.12.2010, 14:12
PM MAIL   Вверх
Zloxa
Дата 8.12.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



и чем подход динамического построения выражения с  merege принципиально отличается от подхода динамического построения выражения Insert с  ON DUPLICATE KEY UPDATE?

подход с if может сбоить в режиме конкуренции, при определенных уровнях изоляции транзакций. Его применимость - условна.

Это сообщение отредактировал(а) Zloxa - 8.12.2010, 14:17


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Vitek1234
Дата 8.12.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Цитата

и чем подход динамического построения выражения с  merege принципиально отличается от подхода динамического построения выражения Insert с  ON DUPLICATE KEY UPDATE?


отличается тем что нужно отдельно формировать имена ключей с их значениями. Если у меня грубо говоря 40 таблиц, то мне нужно ещё формировать для этих 40 таблиц отдельный список ключей. Кроме того и формировать эти значения ключей....в отличии от ON DUPLICATE KEY, где я мог не заморачоваться есть ли это поле ключом или нет...
PM MAIL   Вверх
Zloxa
Дата 8.12.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



а, ну да.
я сразу и не понял, что вы сочувствия ищете.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Vitek1234
Дата 8.12.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008

Репутация: нет
Всего: нет



Может я что-то недоглядел((. Может всё такие есть прямой аналог ON DUPLICATE KEY UPDATE.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.