zoukankan      html  css  js  c++  java
  • SQL Server 2005的几个新功能

    SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的。

    举几个例子来简单说明 这些例子我引用了Northwind库。

    1. TOP 表达式 
    SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了,可以使用表达式。 

    --前n名的订单
    declare
     @n int  
    set @n = 10  
    select TOP(@n* from Orders

    --sql2005之间噢能够可以使用下面的写法,但估计没人这样使用

    --select top(15/3) from orders


    2. 分页 
    不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。

    --按Freight从小到大排序,求20到30行的结果  
    select * from(  
        
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders  
    ) a  

    where row between 20 and 30


    3. 排名 

    select * from(  
        
    select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders  
    ) a  

    where rank between 20 and 30

    • Rank() over()----------结果:1,1,3格式
    • Dense_Rank() over()----结果:1,1,2,2格式
    • Row_Number() over()----结果:1,2,3,4
    • Ntile(3) over()--------结果:按3等进行划分


    4. try ... catch

    SET XACT_ABORT ON  -- 打开 try功能  
    BEGIN TRY  
        
    begin tran  
            
    insert into Orders(CustomerId) values(-1)  
        
    commit tran  
        
    print 'commited'  
    END TRY  
    BEGIN
     CATCH  
        
    rollback     
        
    print 'rolled back'  
    END CATCH


    5. 通用表表达式CTE 
    通过表达式可免除你过去创建临时表的麻烦。

    --例子:结合通用表达式进行分页 

    ;WITH OrderFreight AS(  
        
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders  
    )  

    select OrderId, Freight from OrderFreight where row between 10 and 20

    特别,通用表表达式还支持递归。SQL Server CET 通用表表达式 之 精典递归

    6.OUTPUT关键字

    --定义一个表级变量,所有字段(包括自增长字段)都要定义
    declare @InsertDetails Table
    (
     CustomerID int,
     CustomerName nvarchar(50)
    )
    insert into customer output inserted.CustomerID ,inserted.CustomerName into
    @Insertdetails
    values('This is a test of putput keyword.')
    select * from @insertdetails

    --封装成存储过程

    alert proc tt
    (
     @customerID nvarchar(50)
    )
    as 
    begin
     declare @InsertDetails Table
     (
      CustomerID int,
      CustomerName nvarchar(50)
     )

     insert into customer output inserted.CustomerID ,inserted.CustomerName into
     @Insertdetails
     values(@customerID)
    select * from @insertdetails
    end

    --调用存储过程:
    tt 'Hello everyone'


    7. 直接发布Web Service 
    想要把store procedure变成Web Service就用这个吧,.NET, IIS都不需要,通过Windows 2003的HTTP Protocol Stack直接发布WebService,用这个功能需要Windows 2003 sp1

    --DataSet CustOrdersOrders(string customerID)  
    CREATE ENDPOINT Orders_Endpoint  
    state
    =started  
    as http(  
        path
    ='/sql/orders',  
        AUTHENTICATION
    =(INTEGRATED),  
        ports
    =(clear)  
    )  

    for soap(  
        WebMethod 
    'CustOrdersOrders'(    
            name
    ='Northwind.dbo.CustOrdersOrders'  
        ),  
         
        wsdl
    =default,  
        
    database='Northwind',  
        namespace
    ='http://mysite.org/'  
    )

    Web Service就发布好了,敲入http://localhost/sql/orders?wsdl得到wsdl

    待续...

  • 相关阅读:
    在一个字符串中找到第一个只出现一次的字符
    查找最小的k个数
    动规:最大上升子序列
    平衡二叉树
    【笔记】php和mysql结合 搞了一个表出来
    设计模式心得(既设计模式篇终章):描述设计模式时的通用公式
    分享系列 之 linux IO原理与几种零拷贝机制的实现
    近期分享:BIO 与 NIO 的实质区别到底是什么?
    源码阅读笔记 之 ThreadLocal —— 不复杂,却有点绕的一个 per thread API
    小脑袋瓜充满了问号:为什么AMQP可以叫做 Advanced?JMS就要low一等吗?
  • 原文地址:https://www.cnblogs.com/linybo/p/11192903.html
Copyright © 2011-2022 走看看