品味SQL Server 2005的幾個新功能.txt

iSQlServer發表於2009-07-23

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 

  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 

  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 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-609997/,如需轉載,請註明出處,否則將追究法律責任。

相關文章