zoukankan      html  css  js  c++  java
  • SQL Server 2005中的TSQL增强(二)

    通用表表达式 Common Table Expressions 

      通用表表达式(CTE)是一个可以由定义语句引用的临时表命名的结果集。在他们的简单形式中,您可以将CTE视为类似于视图和派生表混合功能的改进版本。在查询的FROM子句中引用CTE的方式类似于引用派生表和视图的方式。只须定义CTE一次,即可在查询中多次引用它。在CTE的定义中,可以引用在同一批处理中定义的变量。但是CTE的真正威力在于它们的递归功能,即CTE可以包含对它们自身的引用。

      视图、派生表和CTE内部的查询的一般形式

      1、视图

    CREATE VIEW <view_name>(<column_aliases>) AS <view_query>


    2、派生表

    SELECT * FROM (<derived_table)query>) AS <dericed_table_alias>(<column_aliases>)


    3、CTE

    WITH <cte_alias>(<column_aliases>)
    AS
    {
    <cte_query>
    )
    SELECT * FROM <cte_alias]>


    在关键字WITH之后,为CTE提供一个别名,并且为它的结果列提供一个可选的别名列表;编写CTE的主体;然后从外部查询中引用它。

      4、演示代码



    USE AdventureWorks
    GO
    WITH SalesCTE(ProductID, SalesOrderID)
    AS
    (
    SELECT ProductID, COUNT(SalesOrderID)
    FROM Sales.SalesOrderDetail
    GROUP BY ProductID
    )
    SELECT * FROM SalesCTE


    Recursive CTEs 递归的通用表表达式

      递归的CTE是根据至少两个查询(或者称为两个成员)构建的,一个是非递归查询,也成为固定成员,只能调用一次,另外一个是递归查询,也成为递归成员(RM),可以反复调用,直到查询不再返回行。查询由UNION ALL运算符连接为一个单独的CTE。

    --使用递归的通用表表达式


    Code


    新的关系运算符 PIVOT/UNPIVOT/APPLY

      1、PIVOT

      PIVOT运算符将行旋转为列,并且可能同时执行聚合。使用PIVOT运算符时要注意的重要一点是,需要为它提供一个查询表达式,表达式使用视图、派生表或者是CTE只返回所关注的列。

      2、UNPIVOT

      UNPIVOT运算符执行与PIVOT运算符相反的操作;他将列旋转为行了。

      3、APPLY

      APPLY关系运算符允许您对外部表的每个行调用指定的表值函数一次。您可以在查询的FROM子句中指定APPLY,其方式与使用JOIN关系运算符类似。APPLY具有两种形式:CROSS APPLY和OUTER APPLY。

      演示:

    Code


    DDL触发器 DDL Triggers

      SQL Server 2005可以就整个服务器或数据库的某个范围为DDL事件定义触发器。也可以为单个DDL语句(例如:CREAT_TABLE、DROP_TABLE等)或者为一组语句(例如:指定DDL_DATABASE_LEVEL_EVENTS想要触发器触发数据库所有DDL事件)定义DDL触发器。

      在DDL触发器内部,可以通过访问eventdata()函数获得与激发该触发器的事件有关的数据。该eventdata()函数返回有关事件的xml数据。

      DDL触发器特别有用的方案包括DDL更改的完整性检查、审核方案以及其他方案。

      代码演示:

    Code


    总结

      SQL Server 2005中的Transaction-SQL增强功能提高了用户在编写查询时的表达能力,使用户可以改善代码的性能,并且扩充了错误处理能力。SQL Server 2005 在Transaction-SQL上所做的改进反映了其更好地满足了ANSI-99 SQL规范的要求以及客户的需求。在Transaction-SQL和托管代码之间的选择。

  • 相关阅读:
    Ext JS学习第三天 我们所熟悉的javascript(二)
    Ext JS学习第二天 我们所熟悉的javascript(一)
    Ext JS学习第十七天 事件机制event(二)
    Ext JS学习第十六天 事件机制event(一)
    Ext JS学习第十五天 Ext基础之 Ext.DomQuery
    Ext JS学习第十四天 Ext基础之 Ext.DomHelper
    Ext JS学习第十三天 Ext基础之 Ext.Element
    Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)
    针对错误 “服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF” 的原因分析
    C# 使用HttpWebRequest通过PHP接口 上传文件
  • 原文地址:https://www.cnblogs.com/redfox241/p/1474072.html
Copyright © 2011-2022 走看看