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

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQLServer2008的实用小道具 merger使用介绍
    A. 使用 MERGE 在单个语句中对表执行 UPDATE 和 DELETE 操作
      下面的示例使用 MERGE 根据 SalesOrderDetail 表中已处理的订单,每天更新 AdventureWorks 示例数据库中的 ProductInventory 表。通过减去每天对 SalesOrderDetail 表中的每种产品所下的订单数,更新 ProductInventory 表的 Quantity 列。如果某种产品的订单数导致该产品的库存量下降到 0 或更少,则会从 ProductInventory 表中删除该产品对应的行。
      B. 借助派生的源表,使用 MERGE 对目标表执行 UPDATE 和 INSERT 操作
      下面的示例使用 MERGE 以更新或插入行的方式来修改 SalesReason 表。当源表中的 NewName 值与目标表 (SalesReason) 的 Name 列中的值匹配时,就会更新此目标表中的 ReasonType 列。当 NewName 的值不匹配时,就会将源行插入到目标表中。此源表是一个派生表,它使用 Transact-SQL 行构造函数功能指定源表的多个行。有关在派生表中使用行构造函数的详细信息,请参阅 FROM (Transact-SQL)。

      C. 将 MERGE 语句的执行结果插入到另一个表中
      下例捕获从 MERGE 语句的 OUTPUT 子句返回的数据,并将该数据插入另一个表。MERGE 语句根据在 SalesOrderDetail 表中处理的订单,更新 ProductInventory 表的 Quantity 列。本示例捕获已更新的行,并将这些行插入用于跟踪库存变化的另一个表中
    复制代码 代码如下:

    USE AdventureWorks;
    GO
    IF OBJECT_ID (N'Production.usp_UpdateInventory', N'P')
    IS NOT NULL DROP PROCEDURE Production.usp_UpdateInventory;
    GO
    CREATE PROCEDURE Production.usp_UpdateInventory
    @OrderDate datetime
    AS
    MERGE Production.ProductInventory AS target
    USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod
    JOIN Sales.SalesOrderHeader AS soh
    ON sod.SalesOrderID = soh.SalesOrderID
    AND soh.OrderDate = @OrderDate
    GROUP BY ProductID) AS source (ProductID, OrderQty)
    ON (target.ProductID = source.ProductID)
    WHEN MATCHED AND target.Quantity - source.OrderQty = 0
    THEN DELETE
    WHEN MATCHED
    THEN UPDATE SET target.Quantity = target.Quantity - source.OrderQty,
    target.ModifiedDate = GETDATE()
    OUTPUT $action, Inserted.ProductID, Inserted.Quantity, Inserted.ModifiedDate, Deleted.ProductID,
    Deleted.Quantity, Deleted.ModifiedDate;
    GO
    EXECUTE Production.usp_UpdateInventory '20030501'

    复制代码 代码如下:

    USE AdventureWorks;
    GO
    MERGE INTO Sales.SalesReason AS Target
    USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
    AS Source (NewName, NewReasonType)
    ON Target.Name = Source.NewName
    WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
    OUTPUT $action, inserted.*, deleted.*;

    复制代码 代码如下:

    USE AdventureWorks;
    GO
    MERGE INTO Sales.SalesReason AS Target
    USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
    AS Source (NewName, NewReasonType)
    ON Target.Name = Source.NewName
    WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
    OUTPUT $action, inserted.*, deleted.*;

    复制代码 代码如下:

    USE AdventureWorks;
    GO
    CREATE TABLE Production.UpdatedInventory
    (ProductID INT NOT NULL, LocationID int, NewQty int, PreviousQty int,
    CONSTRAINT PK_Inventory PRIMARY KEY CLUSTERED (ProductID, LocationID));
    GO
    INSERT INTO Production.UpdatedInventory
    SELECT ProductID, LocationID, NewQty, PreviousQty
    FROM
    ( MERGE Production.ProductInventory AS pi
    USING (SELECT ProductID, SUM(OrderQty)
    FROM Sales.SalesOrderDetail AS sod
    JOIN Sales.SalesOrderHeader AS soh
    ON sod.SalesOrderID = soh.SalesOrderID
    AND soh.OrderDate BETWEEN '20030701' AND '20030731'
    GROUP BY ProductID) AS src (ProductID, OrderQty)
    ON pi.ProductID = src.ProductID
    WHEN MATCHED AND pi.Quantity - src.OrderQty >= 0
    THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty
    WHEN MATCHED AND pi.Quantity - src.OrderQty = 0
    THEN DELETE
    OUTPUT $action, Inserted.ProductID, Inserted.LocationID, Inserted.Quantity AS NewQty, Deleted.Quantity AS PreviousQty)
    AS Changes (Action, ProductID, LocationID, NewQty, PreviousQty) WHERE Action = 'UPDATE';
    GO
    您可能感兴趣的文章:
    • SQLServer 2008 Merge语句的OUTPUT功能
    • SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)
    • php函数array_merge用法一例(合并同类数组)
    • SQLServer中merge函数用法详解
    上一篇:还原sqlserver2008 媒体的簇的结构不正确的解决方法
    下一篇:SQLServer 2008中SQL增强之一:Values新用途
  • 相关文章
  • 

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

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

    SQLServer2008的实用小道具 merger使用介绍 SQLServer2008,的,实用,小道具,