• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQLServer 2008 Merge语句的OUTPUT功能
    下面介绍一下把Output同2008的新T-SQL语句Merge组合使用的方法:
    新建下面表:
    复制代码 代码如下:

    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;

    结果集为:

    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';
    您可能感兴趣的文章:
    • SQLServer2008的实用小道具 merger使用介绍
    • SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)
    • php函数array_merge用法一例(合并同类数组)
    • SQLServer中merge函数用法详解
    上一篇:SQL2008中 阻止保存要求重新创建表的更改 的解决方法
    下一篇:SQLServer 2008 新增T-SQL 简写语法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQLServer 2008 Merge语句的OUTPUT功能 SQLServer,2008,Merge,语句,的,