WEB开发网
开发学院数据库MSSQL Server SQL 2008数据仓库可扩展性 阅读

SQL 2008数据仓库可扩展性

 2008-09-28 10:06:42 来源:WEB开发网   
核心提示: 对于存在于源表中而不存在于目标表中的每一条记录,WHEN [TARGET] NOT MATCHED 条件子句允许你将一条记录INSERT到目标表中,SQL 2008数据仓库可扩展性(7),对于存在于目标表中而不存在于源表中的每一条记录,WHEN SOURCE NOT MATCHED 条件子

对于存在于源表中而不存在于目标表中的每一条记录,WHEN [TARGET] NOT MATCHED 条件子句允许你将一条记录INSERT到目标表中。

对于存在于目标表中而不存在于源表中的每一条记录,WHEN SOURCE NOT MATCHED 条件子句允许你UPDATE 或DELETE 目标表中的给定记录。

你还可以对每一个WHEN条件子句指定一个搜索条件来选择要对记录执行哪种类型的DML操作。MERGE语句的OUTPUT条件子句包括一个新的虚拟字段,叫做$action,你可以使用它来标识对每一条记录所执行的DML操作。

在数据仓库环境中,MERGE 语句用来执行对缓慢变化维度(Slowly Changing Dimensions, SCD)有效的插入和删除操作以及在很多普通场景中维护事实数据表。比其运行单独的插入、更新和删除语句,MERGE 语句具有更高的性能,因为它只要求将数据传递过来。

SQL Server2008还推出了一个针对插入语句的扩展功能,它允许插入语句使用嵌套INSERT、UPDATE、DELETE或MERGE 语句的OUTPUT 条件子句返回的记录。

假设你有一个DimBook表(ISBN、Price、IsCurrent),它用于跟踪一个书店中每一本书的历史价格和当前的价格。更改价格和添加新书是按周进行的,每星期会生成一个源表WeeklyChanges (ISBN、Price),这些更改会应用于DimBook 表。每一本新书都会插入一条记录。在这一周中价格有变化的现有书籍会以IsCurrent=0进行更新,并且会插入一条新记录以反映新价格。下面这个Transact-SQL 语句将使用新的MERGE和INSERT功能执行这些操作。

INSERT INTO DimBook(ISBN, Price, IsCurrent)
  SELECT ISBN, Price, 1
  FROM
  (
    MERGE DimBook as book
    USING WeeklyChanges AS src
    ON (book.ISBN = src.ISBN and book.IsCurrent = 1)
    WHEN MATCHED THEN
      UPDATE SET book.IsCurrent = 0
    WHEN NOT MATCHED THEN
      INSERT VALUES (src.ISBN, src.Price, 1)
    OUTPUT $action, src.ISBN, src.Price
  ) AS Changes(action, ISBN, Price)
  WHERE action = 'UPDATE';

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:SQL 数据 仓库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接