您的位置:首页 > 数据库

SQL Server 2005的几个新功能,转一个老贴,加入自己一些体会和补充

2007-12-14 22:46 417 查看
(红色字是我添加的。)
转自:http://www.cnfan.net/microsoft/mssql/2006-1/18/2006_01_18_735.html ? 其实我也不知道谁是最初的作者。

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




select * from(


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


) a


where rank between 20 and 30



排名和分页不是用的同一个东西吗?

4. try ... catch
SQL Server 2000没有异常,T-SQL必须逐行检查错误代码,对于习惯了try catch程序员,2005是不是更加亲切:




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
特别,通过表达式还支持递归。

6. 直接发布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
这个 功能我们在项目里使用了一把,算是可以用吧,不够在授权上还是困惑了一把。

其余功能,比如对Reporting Service的改进算是不小。
至少配置起来算容易一点了(虽然还是容易配置实效),还有一个报表编辑器不错,微软使用.net 2.0的ClickOne部署的咚咚。使得你不需要安装VS或者SQLServer的编辑器也可以设计报表。(不过好像有个前提是你的报表是基于报表模型的,这个报表模型也是个有意思的东西,有时间下次介绍一下)
另外一个重要功能就是对Analysis Service,真是个好东西,只要按照向导,很快就可以分析多维数据了,好。

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

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


--前n名的订单


declare @n int


set @n = 10


select TOP(@n) * 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: