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

Откуда:
Сообщений: 243
Есть 2 базы. В базах есть некая таблица. Ее структура в обеих базах одинакова. Ключевое поле у таблицы - RECID.
Таблицы в обеих базах заполнены некоторыми данными. RecID у некоторых записей в обеих базах совпадают, но значения в других полях таблицы для этой записи могут отличаться.
Мне надо содержимое этих таблиц слить в первую базу, причем для тех записей, у которых RECID совпадают, выполнить ОБНОВЛЕНИЕ (UPDATE) записи в первой базе, а для тех, какие отсутствуют, выполнить ВСТАВКУ (INSERT)
Как это сделать элегантно, максимально быстро и желательно одним запросом, если конечно это возможно одним запросом сделать? (есть конечно вариант через курсор, но это мне кажется сложно и долго)

Спасибо.
12 дек 14, 15:45    [16989489]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Мне надо содержимое этих таблиц слить в первую базу, причем для тех записей, у которых RECID совпадают, выполнить ОБНОВЛЕНИЕ (UPDATE) записи в первой базе, а для тех, какие отсутствуют, выполнить ВСТАВКУ (INSERT)

MERGE
12 дек 14, 15:47    [16989500]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Как это сделать элегантно, максимально быстро и желательно одним запросом, если конечно это возможно одним запросом сделать? (

Или 2 запроса - UPDATE и INSERT
12 дек 14, 15:47    [16989510]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory, MERGE не подходит. Его еще не было в SQL2000, а скрипт должен работать и там
12 дек 14, 15:48    [16989518]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
Как это сделать элегантно, максимально быстро и желательно одним запросом, если конечно это возможно одним запросом сделать? (

Или 2 запроса - UPDATE и INSERT

А подробнее можно?
12 дек 14, 15:49    [16989525]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Его еще не было в SQL2000, а скрипт должен работать и там

2 команды - UPDATE и INSERT
12 дек 14, 15:49    [16989528]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Glory
пропущено...

Или 2 запроса - UPDATE и INSERT

А подробнее можно?

В смысле ?
Вы не знаете, что в UPDATE/INSERT можно использовать соединения нескольких таблиц ?
12 дек 14, 15:50    [16989546]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
пропущено...

А подробнее можно?

В смысле ?
Вы не знаете, что в UPDATE/INSERT можно использовать соединения нескольких таблиц ?


Вы не поняли. Я просил пример такого запроса.
12 дек 14, 15:53    [16989572]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Вы не поняли. Я просил пример такого запроса.

Вы тоже не умеете писать запросы, в которых больше одной таблицы ?
Что такое JOIN знаете ?
12 дек 14, 15:55    [16989598]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory, что такое Join знаю, только как он тут мне поможет?
12 дек 14, 16:03    [16989688]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Glory, что такое Join знаю, только как он тут мне поможет?

Вы в хелпе про синтакис UPDATE читали ?
Может даже примеры разбирали ?
Может даже до примера "В. Использование инструкции UPDATE с данными из другой таблицы" добрались ?
12 дек 14, 16:08    [16989735]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
Glory, что такое Join знаю, только как он тут мне поможет?

Вы в хелпе про синтакис UPDATE читали ?
Может даже примеры разбирали ?
Может даже до примера "В. Использование инструкции UPDATE с данными из другой таблицы" добрались ?


Спасибо. Это уже ближе к теме.

Я правильно понимаю. что после выполнения этой инструкции на обновление, необходимо выполнить еще ону инструкцию, но уже на вставку тех записей, которые есть во второй базе, а в первой их еще нет, да?
12 дек 14, 16:14    [16989803]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Я правильно понимаю. что после выполнения этой инструкции на обновление, необходимо выполнить еще ону инструкцию, но уже на вставку тех записей, которые есть во второй базе, а в первой их еще нет, да?

Бинго.
Только не в базах, а в таблицах
12 дек 14, 16:14    [16989813]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Спасибо. Это уже ближе к теме.

Вы точно знаете, что такое JOIN ?
12 дек 14, 16:15    [16989818]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
Спасибо. Это уже ближе к теме.

Вы точно знаете, что такое JOIN ?

Знаю, знаю. И то что Join бывает разных видов тоже знаю: INNER, OUTER, CROSS
12 дек 14, 16:17    [16989835]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
не все видно вы знаете, откройте для себя LEFT / RIGHT
12 дек 14, 16:18    [16989851]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Konst_One
не все видно вы знаете, откройте для себя LEFT / RIGHT

:)
12 дек 14, 16:19    [16989871]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
Знаю, знаю. И то что Join бывает разных видов тоже знаю: INNER, OUTER, CROSS

И какой же из них выберет записи двух таблиц "у которых RECID совпадают" ?
А какой - "у которых RECID не совпадают" ?
Все начинается с SELECT-а. Который в 99% легко преобразуется во все другие запросы
12 дек 14, 16:20    [16989881]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
Знаю, знаю. И то что Join бывает разных видов тоже знаю: INNER, OUTER, CROSS

И какой же из них выберет записи двух таблиц "у которых RECID совпадают" ?
А какой - "у которых RECID не совпадают" ?
Все начинается с SELECT-а. Который в 99% легко преобразуется во все другие запросы


LEFT - выберет совпадающие записи
RIGHT - выберет несовпадающие
12 дек 14, 16:40    [16990075]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
EFT - выберет совпадающие записи
RIGHT - выберет несовпадающие

Неправильно

Сообщение было отредактировано: 12 дек 14, 16:42
12 дек 14, 16:42    [16990099]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
EXCEPT / INTERSECT (на затравку)
http://msdn.microsoft.com/ru-ru/library/ms188055.aspx
12 дек 14, 16:54    [16990207]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Glory
harisma
EFT - выберет совпадающие записи
RIGHT - выберет несовпадающие

Неправильно


Тогда так:

select * from tbl1 as a INNER Join tbl2 as b on a.KeyFld = b.KeyFld - выберет совпадающие записи
select * from tbl1 as a right join tbl2 as b on a.KeyFld = b.KeyFld - выберет несовпадающие
12 дек 14, 16:58    [16990248]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
harisma
Member

Откуда:
Сообщений: 243
Konst_One
EXCEPT / INTERSECT (на затравку)
http://msdn.microsoft.com/ru-ru/library/ms188055.aspx

Не подходит. Их нет в SQL 2000.
12 дек 14, 16:59    [16990262]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
harisma
select * from tbl1 as a INNER Join tbl2 as b on a.KeyFld = b.KeyFld - выберет совпадающие записи

правильно

harisma
select * from tbl1 as a right join tbl2 as b on a.KeyFld = b.KeyFld - выберет несовпадающие

опять неправильно
12 дек 14, 17:00    [16990266]     Ответить | Цитировать Сообщить модератору
 Re: Обновление существующих и добавление новых записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
harisma
Konst_One
EXCEPT / INTERSECT (на затравку)
http://msdn.microsoft.com/ru-ru/library/ms188055.aspx

Не подходит. Их нет в SQL 2000.


надо было сначала сразу указать
SELECT @@VERSION
12 дек 14, 17:02    [16990292]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить