Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒SQL\T-SQL⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA

T-SQL 2012: MERGE


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

USE tsql;

--Первая таблица
CREATE TABLE dt
(
    ID INT IDENTITY PRIMARY KEY,
    Name VARCHAR(30) UNIQUE,
    Price INT
);

INSERT INTO dt VALUES('N1', 5)
INSERT INTO dt VALUES('N2', 5)
INSERT INTO dt VALUES('N3', 5) 

--Вторая таблица
CREATE TABLE st
(
    ID INT IDENTITY PRIMARY KEY,
    Name VARCHAR(30) UNIQUE,
    Price INT
)

INSERT INTO st VALUES('N1', 15)
INSERT INTO st VALUES('N2', 25)
INSERT INTO st VALUES('N3', 35)
INSERT INTO st VALUES('N4', 45) 

--1 - Условие: dt.Name равен st.Name

--2 - Совпадение: значение Price - разница из второй таблицы отнимаем данные из первой таблицы

--3 - Добавим в результирующий набор запись во второй таблице, для которой нет варианта в первой таблице

--4 - Записи есть в обеих таблицах, и st.Price = 25, удаляем запись.


MERGE dt -- Данные будут сохранены в этой таблице

USING
(
    --Таблица, с которой сравниваем.
    SELECT Name, Price FROM st
) AS st (Name, Price)

ON (dt.Name=st.Name) --1

WHEN MATCHED AND st.Price = 25 --4
    THEN DELETE

WHEN MATCHED --2
    THEN UPDATE SET dt.Price = st.Price - dt.Price

WHEN NOT MATCHED --3
    THEN INSERT VALUES (st.Name, st.Price);

--Посмотрим результат
SELECT * FROM dt


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru