• 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

  • 相关阅读:
    windows phone 8 更换锁屏界面图片
    Kinect for Windows 入门与开发
    Windows 8 学习
    windows phone 8 锁屏界面 显示应用程序的消息提醒
    Windows 8 如何在后台播放音频
    C# 4.0 的 Visual Studio 2010 示例
    windows phone 页面切换 动画
    Windows Phone 官方示例学习:Short message dictation and web search grammars sample(语音识别,文字语音)
    Windows Phone 官方示例学习:Background Transfer Service Sample(后台传输)
    打日志流程
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/2016030.html
Copyright © 2020-2023  润新知