zoukankan      html  css  js  c++  java
  • SQL Server 2008新特性 Merge 详细见联机手册

    USE AdventureWorks2008R2;
    GO
    CREATE PROCEDURE dbo.InsertUnitMeasure
    @UnitMeasureCode nchar(3),
    @Name nvarchar(25)
    AS
    BEGIN
    SET NOCOUNT ON;
    -- Update the row if it exists.
    UPDATE Production.UnitMeasure
    SET Name = @Name
    WHERE UnitMeasureCode = @UnitMeasureCode
    -- Insert the row if the UPDATE statement failed.
    IF (@@ROWCOUNT = 0 )
    BEGIN
    INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name)
    VALUES (@UnitMeasureCode, @Name)
    END
    END;
    GO
    -- Test the procedure and return the results.
    EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'Test Value';
    SELECT UnitMeasureCode, Name FROM Production.UnitMeasure
    WHERE UnitMeasureCode = 'ABC';
    GO

    -- Rewrite the procedure to perform the same operations using the MERGE statement.
    --
    Create a temporary table to hold the updated or inserted values from the OUTPUT clause.
    CREATE TABLE #MyTempTable
    (ExistingCode
    nchar(3),
    ExistingName
    nvarchar(50),
    ExistingDate
    datetime,
    ActionTaken
    nvarchar(10),
    NewCode
    nchar(3),
    NewName
    nvarchar(50),
    NewDate
    datetime
    );
    GO
    ALTER PROCEDURE dbo.InsertUnitMeasure
    @UnitMeasureCode nchar(3),
    @Name nvarchar(25)
    AS
    BEGIN
    SET NOCOUNT ON;

    MERGE Production.UnitMeasure
    AS target
    USING (
    SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
    ON (target.UnitMeasureCode = source.UnitMeasureCode)
    WHEN MATCHED THEN
    UPDATE SET Name = source.Name
    WHEN NOT MATCHED THEN
    INSERT (UnitMeasureCode, Name)
    VALUES (source.UnitMeasureCode, source.Name)
    OUTPUT deleted.
    *, $action, inserted.* INTO #MyTempTable;
    END;
    GO
    -- Test the procedure and return the results.
    EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'New Test Value';
    EXEC InsertUnitMeasure @UnitMeasureCode = 'XYZ', @Name = 'Test Value';
    EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'Another Test Value';

    SELECT * FROM #MyTempTable;
    -- Cleanup
    DELETE FROM Production.UnitMeasure WHERE UnitMeasureCode IN ('ABC','XYZ');
    DROP TABLE #MyTempTable;
    GO

  • 相关阅读:
    Vue之数据排序加签
    微信小程序之评分页面
    Vue之展示PDF格式的文档
    动态规划问题思考(DP)
    LitJson的使用
    c#事件管理器
    unity shader 学习
    unity ugui图片自适应文字内容大小
    unity3d各种OpenFileDialog操作
    ue4 使用3dsmax制作布料的插件及下载位置
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/2016030.html
Copyright © 2011-2022 走看看