熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQLServer 2008中SQL增強之二 Top新用途

2022-06-13   來源: SQL Server 
TOP替代Set RowCount
在SQL Server 之前的傳統SQL語句中top語句是不支持局部變量的

此時可以使用Set RowCount但是在SQL Server /TOP通常執行得更快所以應該用TOP關鍵字來取代Set RowCount

  復制代碼 代碼如下:

  /***************創建測試表*********************
****************downmoo ***************/
IF NOT OBJECT_ID([Demo_Top]) IS NULL
DROP TABLE [Demo_Top]
GO
Create table [Demo_Top]
(PID int identity() primary key not null
PName nvarchar() null
AddTime dateTime null
PGuid Nvarchar()
)
go
truncate table [Demo_Top]
/***************創建條測試數據*********************
****************downmoo ***************/
declare @d datetime
set @d=getdate()
declare @i int
set @i=
while @i<=
begin
insert into [Demo_Top]
select cast(datepart(msgetdate()) as nvarchar())+Replicate(Adatepart(ssgetdate()))
getdate()
NewID()
set @i=@i+
end


注意TOP關鍵字可以用於SelectUpdate和Delete語句中

  復制代碼 代碼如下:

  Declare @percentage float
set @percentage=
select Top (@percentage) percent PName from [Demo_Top] order by PName
注意是( row(s) affected)


邀月注如果只是需要一些樣本也可以使用TableSample以下語句返回表Demo_Top的一定百分比的隨機行

  復制代碼 代碼如下:

  select PNameAddTime PGuid from [Demo_Top]
TableSample System( percent)
( row(s) affected)


注意這個百分比是表數據頁的百分比而不是記錄數的百分比因此記錄數目是不確定的
TOP分塊修改數據
TOP的第二個關鍵改進是支持數據的分塊操作換句話說避免在一個語句中執行非常大的操作而把修改分成多個小塊這大大改善了大數據量大訪問量的表的並發性可以用於大的報表或數據倉庫應用程序此外分塊操作可以避免日志的快速增長因為前一操作完成後可能會重用日志空間如果操作中有事務已經完成的修改數據已經可以用於查詢而不必等待所有的修改完成
仍以上表為例

  復制代碼 代碼如下:

  while (select count() from [Demo_Top])>
begin
delete top () from [Demo_Top]
end
/*
( row(s) affected)
( row(s) affected)
( row(s) affected)
( row(s) affected)
( row(s) affected)
*/


注意是每批刪除條數據TOP也可以用於Select和Update語句其中後者更為實用
Select TOP()
Update TOP()
邀月注本文版權由邀月和博客園共同所有轉載請注明出處
From:http://tw.wingwit.com/Article/program/SQLServer/201404/30567.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.