Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

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


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

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

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

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

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект