SqlServer2008例項49流控制

2021-10-09 00:14:55 字數 3509 閱讀 9532

目錄

1.使用return

2.使用while

3.使用goto

4.使用waitfor

return用來立即退出當前的t-sql批處理、查詢或儲存過程,並且不執行它之後的批處理/查詢/過程域中的任何**。return僅退出當前域中執行的**。如果在儲存過程a中呼叫了儲存過程b,並且儲存過程b發起乙個return,那麼儲存過程b會立即終止,但是儲存過程a還會繼續,就好像b已經成功完成。

示例1:使用return來無條件終止乙個查詢:

use adventureworks

goif not exists

(select productid from production.product where color='pink')

begin

return

end--不會再執行

select productid

from production.product

where color='pink'

示例2:return支援可選的整數表示式:

return[integer_expression]

這個整數值能用於儲存過程和呼叫應用程式的通訊,例如:

use adventureworks

gocreate procedure #usp_tempproc

asselect 1/0

return @@error

go--執行儲存過程,從區域性變數捕獲return**

declare @errorcode int

exec @errorcode=#usp_tempproc

print @errorcode

示例演示了建立乙個臨時儲存過程,它包含了建立以o作除數的錯誤的t-sql。return用來捕獲@@errorcode值8134,它返回給呼叫者並通過@errorcode區域性變鼉列印出來。如果整數值沒有顯式放入return的呼叫,那麼會傳送0作為預設值。

while的語法如下;

while boolean_expression   

只要布林表示式還是true, while就會保證t-sql語句或者批處理。一直處理。使用break關鍵字可

以從最內部的while迴圈中退出,continue關鍵字導致迴圈重啟動。

示例1:系統儲存過程sp_spaceused用來返回@awtables表變數中每個表的空間占用情況:

use adventureworks

go--宣告變數

declare @awtables table(schematable varchar(100))

declare @tablename varchar(100)

--把表名插入表變數

insert @awtables

(schematable)

select table_schema+ '.' + table_name

from information_schema.tables

where table_type='base table'

order by table_schema + '.' +table_name

--使用sp_spaceused匯報每個表的空間使用情況

示例2:    while命令可以在**中使用關鍵字break和continue。break用來退出while迴圈,而continue用來繼續while迴圈。例如:

while(1=1)

begin

print 'endless while,because 1 always equals 1'

if 1=1

begin

break

endelse

begin

continue

endend

use adventureworks

godeclare @name nvarchar(50)='engineering'

declare @groupname nvarchar(50)='research and development'

declare @exist bit=0

if exists (select name from humanresources.department where name=@name)

begin

set @exist=1

goto skipinsert

endinsert humanresources.department

(name,groupname)

values(@name,@groupname)

skipinsert:

if @exist=1

begin

print @name + ' already exists in humanresources.department'

endelse

begin

print 'row added'

end

waitfor   

waitfor delay的time to_pass引數是在執行命令前等待的秒數、分鐘數和小時數。waitfor time的time_to_execute引數用來指定執行批處理的實際時間(小時、分鐘和秒)。receive_statement和timeout選項用來和service broker一起使用。

示例1:在select查詢執行之前通過waitfor建立乙個10秒的延遲:

waitfor delay '00:00:10'

begin

select transactionid,quantity

from production.transactionhistory

end

示例2:查詢直到指定時間才會執行,在這裡是7:01pm:

use adventureworks

gowaitfor time '19:01:00'

begin

select count(*)

from production.transactionhistory

end

SqlServer2008例項15高階資料修改技術

目錄 1.使用top分塊修改資料 2.在一條語句中執行insert update和delete use adventureworks go 建立乙個示例刪除表 select into production.example billofmaterials from production.billofm...

SqlServer2008例項19事務 鎖定和併發

隔離性 isolation 是acid中的乙個屬性。事務隔離是指由某個事務作出的修改能被資料庫產生的其他事務看見的程度 例如在資料庫訪問併發的條件下 對於最高端的隔離,每乙個事務產生就好像在同一時間只有 乙個事務存在一樣,它看不到其他事務作出的修改。對於最低階的隔離,任何事務進行的操作,無論是否提交...

SqlServer2008例項27管理超大型表

sql server表分割槽功能和檔案組的放置.表分割槽提供了內建的方法來水平劃分表 索引中的資料,同時要管理乙個邏輯物件。水平分割槽是指每乙個分割槽都有同樣數量的列,只是減少了行的數量。分割槽能使超大型表 索引的管理變得簡單,減少載入時間,改善查詢時間,並允許更小的維護視窗。sql server ...