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

  • 相关阅读:
    Template(模板)模式
    Android活动(Activity)创建及生命周期
    Android--SharedPreferences数据存储方案
    Adapter适配器模式--图解设计模式
    准时制生产(Just in Time,JIT)
    术语
    制造资源计划(Manufacturing Resource Planning,Mrp II)
    Angualr6表单提交验证并跳转
    Android PDA扫描枪广播接搜条码并使用
    Java统计代码行数
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/2016030.html
Copyright © 2011-2022 走看看