当前位置:Gxlcms > 数据库问题 > SQL Server 2008 新增T-SQL 简写语法

SQL Server 2008 新增T-SQL 简写语法

时间:2021-07-01 10:21:17 帮助过:2人阅读

  •   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语句为

    [c-sharp] view plaincopy  
    1. MERGE Book AS B  
    2.    USING WeeklyChange AS WC  
    3.     ON B.ISBN = WC.ISBN  
    4.    WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN  
    5.     UPDATE SET B.Price = WC.Price, B.Shelf = WC.Shelf  
    6.    WHEN NOT MATCHED THEN  
    7.     INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf)  
    8.    OUTPUT $action, inserted.*, deleted.*, SYSDATETIME()  
    9.     INTO BookHistory;  

     

    结果集为:

    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情况。如果只需要其中一种,可以用下面这种方法过滤:

     

    [c-sharp] view plaincopy  
    1. INSERT INTO Book(ISBN, Price, Shelf, ArchivedAt)  
    2.  SELECT ISBN, Price, Shelf, GETDATE() FROM  
    3.  (MERGE Book AS B  
    4.    USING WeeklyChange AS WC  
    5.     ON B.ISBN = WC.ISBN AND B.ArchivedAt IS NULL  
    6.    WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN  
    7.     UPDATE SET Price = WC.Price, Shelf = WC.Shelf  
    8.    WHEN NOT MATCHED THEN  
    9.     INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf, NULL)  
    10.    OUTPUT $action, WC.ISBN, Deleted.Price, Deleted.Shelf  
    11.  ) CHANGES(Action, ISBN, Price, Shelf)  
    12.   WHERE Action = ‘UPDATE‘;  

     

    SQL Server 2008 新增T-SQL 简写语法

    标签:

    人气教程排行