SQLServer 2008 Merge語句的OUTPUT功能
新建下面表:
CREATE TABLE Book(
ISBN varchar(20) PRIMARY KEY,
Price decimal,
Shelf int)
CREATE TABLE WeeklyChange(
ISBN varchar(20) PRIMARY KEY,
Price decimal,
Shelf int)
CREATE TABLE BookHistory(
Action nvarchar(10),
NewISBN varchar(20),
NewPrice decimal,
NewShelf int,
OldISBN varchar(20),
OldPrice decimal,
OldShelf int,
ArchivedAt datetime2)
SQL語句為
MERGE Book AS B
USING WeeklyChange AS WC
ON B.ISBN = WC.ISBN
WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
UPDATE SET B.Price = WC.Price, B.Shelf = WC.Shelf
WHEN NOT MATCHED THEN
INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf)
OUTPUT $action, inserted.*, deleted.*, SYSDATETIME()
INTO BookHistory;
結(jié)果集為:
SELECT * FROM BookHistory
GO
Action NewISBN NewPrice NewShelf OldISBN OldPrice OldShelf ArchivedAt
------ ------- -------- -------- ------- -------- -------- ---------------------------
UPDATE A 101 1 A 100 1 2007-11-25 14:47:23.9907552
INSERT C 300 3 NULL NULL NULL 2007-11-25 14:47:23.9907552
這里有Insert和Update兩種Output情況。如果只需要其中一種,可以用下面這種方法過濾:
INSERT INTO Book(ISBN, Price, Shelf, ArchivedAt)
SELECT ISBN, Price, Shelf, GETDATE() FROM
(MERGE Book AS B
USING WeeklyChange AS WC
ON B.ISBN = WC.ISBN AND B.ArchivedAt IS NULL
WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
UPDATE SET Price = WC.Price, Shelf = WC.Shelf
WHEN NOT MATCHED THEN
INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf, NULL)
OUTPUT $action, WC.ISBN, Deleted.Price, Deleted.Shelf
) CHANGES(Action, ISBN, Price, Shelf)
WHERE Action = 'UPDATE';
相關(guān)文章
SQL Server 2008中的數(shù)據(jù)表壓縮功能詳細(xì)介紹
這篇文章主要介紹了SQL Server 2008中的數(shù)據(jù)表壓縮功能詳細(xì)介紹,介紹了為何使用數(shù)據(jù)壓縮、數(shù)據(jù)壓縮的原理、數(shù)據(jù)壓縮注意事項等,需要的朋友可以參考下2014-08-08Sql server 2008 express遠(yuǎn)程登錄實例設(shè)置 圖文教程
Sql server 2008 express遠(yuǎn)程登錄實例設(shè)置 圖文教程,需要的朋友可以參考下。2011-11-11SQL Server2008 Order by在union子句不可直接使用的原因詳解
這篇文章主要介紹了SQL Server2008 Order by在union子句不可直接使用的原因詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07MyEclipse 配置SQL Server 2008數(shù)據(jù)庫驅(qū)動操作步驟
本篇文章小編為大家介紹,MyEclipse 配置SQL Server 2008數(shù)據(jù)庫驅(qū)動操作步驟。有需要的朋友參考下2013-04-04Sql Server 2008數(shù)據(jù)庫新建分配用戶的詳細(xì)步驟
當(dāng)一個項目完成后,為了數(shù)據(jù)安全,總會對該項目的數(shù)據(jù)庫分配一個用戶,應(yīng)該說總會創(chuàng)建一個用戶來管理這個數(shù)據(jù)庫,并且這個用戶只能管理這個數(shù)據(jù)庫,絕對不要使用sa用戶2017-10-10SQL Server 2008 Express 及 Management Studio Express下載安裝配置教程
這篇文章主要講如何一步步從下載、安裝、配置 SQL Server 2008 Express 和 SMSS 到最后 使用 SMSS 連接本地的數(shù)據(jù)庫服務(wù),需要的朋友可以參考下2020-08-08Microsoft SQL Server 2008安裝圖解教程(Windows 7)
本文詳細(xì)介紹了SQL Server 2008的完整安裝過程,但未介紹關(guān)于SP1補(bǔ)丁安裝說明,在Windows 7系統(tǒng)上運(yùn)行必須安裝此補(bǔ)丁,對于部分服務(wù)的配置也未做詳細(xì)的介紹2012-07-07