• 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

    待续...

  • 相关阅读:
    20200601:百万级int数据量的一个array求和。
    20200602:千万级数据量的list找一个数据。
    20200531:假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
    20200530:主从数据库不一致如何解决?
    [USACO06DEC]Milk Patterns G
    [HAOI2016]找相同字符
    [AHOI2013]差异
    [SCOI2012]喵星球上的点名
    [APIO2014]回文串
    [TJOI2015]弦论
  • 原文地址:https://www.cnblogs.com/linybo/p/11192903.html
Copyright © 2020-2023  润新知