T-SQL-流程式控制制語句

來源:互聯網
上載者:User

流程式控制制語句
流程式控制制語句是指那些用來控製程序執行和流程分支的命令,在SQL Server 2000中,育種控制語句主要用來控制SQL語句、語句塊或者預存程序執行流程。
( 1 ). begin end語句
begin end語句能夠將多個Transact - SQL語句組合成一個語句塊,並將它們視為一個單元處理。在條件陳述式和迴圈等控制流程程語句中,當符合特定條件便要執行兩個或者多個語句時,就需要使用beginend語句,其文法形式為:
begin
{sql_statement | statement_block}
end
例:
use  taihang
go
declare   @message   varchar ( 200 )
if   exists ( select   *   from  員工資料表
where  所屬部門 = ' 辦工室 ' )
begin
set   @message = ' 下列人員在辦公室工作 '
print   @message
select  員工姓名  from  員工資料表
where  所屬部門 = ' 辦公室 '
end
else
begin
set   @message = ' 沒有人在辦公室 '
print   @message
end
go
( 2 ). if else語句
if else語句是條件判斷語句,其中,else子句是可先的,最簡單的if語句沒有else子句部分。 if else語句用來判斷當某一條件成立時執行某段程式,條件不成立時執行另一段程式。SQL Server允許嵌套使用ifelse語句,而且嵌套層數沒有限制。
文法:
if  boolean_expression
{sql_statement | statement_block}
[ else
{sql_statement|statement_block} ]
( 3 ). if  exists
1 > .if後面的布林運算式可含有select語句,如果select語句一個值,它可用來與另一值進行比較,以得到布林運算式。
2 > .如果select語句返回不止一個值,可使用if  exists .文法如下:
if   exists ( select  statement)
{sql_statement | statement_block}
[ else [bolean_expression ] 
{sql_statement | statement_block}]
例:查詢標識號為1389的出版商出版的任何書的資訊
if   exists ( select   *   from  titles
where  pub_id = ' 1389 ' )
begin
print ' 包含如書 '
select   *   from  titles
where  pub_id = ' 1389 '
end
else
print ' 無 '
注意:一定不要把ifexists和彙總函式一起使用,因為彙總函式總是返回資料,即使資料是0

( 4 ).while語句
while語句用於設定重複執行SQL語句或語句塊的條件。只要指定的條件為真,就重複執行語句。其中,continue語句可以使程式跳過continue語句後面的語句,回到while迴圈的第一行命令。break語句則使程式完全跳出迴圈,結束while語句的執行。
1 > break語句交在某些情況發生時,立即無條件地退出最內層while迴圈,文法為:
while邏輯運算式
begin
break
end
2 > continue語句在某些情況發生時,控製程序跳出本次迴圈,重新天始下一次while迴圈。文法為:
while邏輯運算式
begin
continue
end
注意:如果select語句用作while語句的條件,那麼,select語句必須包含在英文括弧中。

例:
declare   @x   int ,  @y   int ,  @c   int
select   @x = 1 , @y = 1
while   @x < 3
begin
  print   @x
  while   @y < 3
  begin
   select   @c = 100 * @x + @y
   print   @c
   select   @y = @y + 1
  end
  select   @x = @x + 1
  select   @y = 1
end
( 5 ).case運算式
case運算式可以計算多個條件,並將其中一個合格結果運算式返回。case運算式的文法為:
case  欄位名或變數名
when  邏輯運算式1  then  結果運算式1
when  邏輯運算式2  then  結果運算式2
when  邏輯運算式3  then  結果運算式3

else  結果運算式
end
例:調整員工工資,工作層級為1的上調8 % ,工作層級為2的上調7 % ,工作層級為3的上調6 % ,其它上調5 %
use  taihang
go
update  employee
set  wage =
case
when  job_level = ' 1 '   then  wage * 1.08
when  job_level = ' 2 '   then  wage * 1.07
when  job_level = ' 3 '   then  wage * 1.06
else
then  wage * 1.05
( 6 ).return語句
return語句用於無條件地終止一個查詢、預存程序或者批處理,此時位於return之後的程式將不會被執行。return語句的文法形式為:
return  整數運算式
通常,預存程序使用傳回碼表示預存程序執行的成功或失敗。無錯誤,則返回0,否則,返回非零值。

( 7 ).waitfor語句
waitfor語句用於暫時停止執行SQL語句、語句塊或者預存程序等,直到所設定的時間已過或者所設定的時間已到才繼續執行。
文法:
waitfor  delay 時間間隔
其中:時間間隔指定執行waitfor語句之前需要等待事件,最多為24小時。
也可寫成: waitfor  time 時間值
其中,時間值指定waitfor語句將要執行的時間

流程式控制制語句
Transact-SQL語言提供了一些可以用於改變語句執行順序的命令,稱為流程式控制制語句。流程式控制制語句允許使用者更好地組織預存程序中的語句,方便地實現程式的功能。流程式控制制語句與常見的程式設計語言類似,主要包含以下幾種。
(1)   IF…ELSE語句
IF <條件運算式>
     <命令列或程式塊>
[ELSE [條件運算式]
     <命令列或程式塊>]
其中<條件運算式>可以是各種運算式的組合,但運算式的值必須是“真”或“假”。ELSE子句是可選的。IF…ELSE語句用來判斷當某一條件成立時執行某段程式,條件不成立時執行另一段程式。如果不使用程式塊,IF或ELSE只能執行一條命令。IF…ELSE可以嵌套使用,最多可嵌套32級。
(2)   BEGIN…END語句
BEGIN
     <命令列或程式塊>
END
BEGIN…END用來設定一個程式塊,該程式塊可以被視為一個單元執行。BEGIN…END經常在條件陳述式中使用,如IF…ELSE語句。如果當IF或ELSE子句為真時,想讓程式執行其後的多條語句,這時就要把這多條語句用BEGIN…END括起來使之成為一個語句塊。在BEGIN…END語句中可以嵌套另外的BEGIN…END語句來定義另一程式塊。
(3)   CASE語句
CASE<運算式>
     WHEN<運算式>THEN<運算式>
     …
WHEN<運算式>THEN<運算式>
[ELSE<運算式>]
END
例如,在pubs資料庫中查詢每個作者所居住州的全名,可以使用如下代碼實現:
SELECT au_fname, au_lname,
   CASE state
      WHEN 'CA' THEN 'California'
      WHEN 'KS' THEN 'Kansas'
      WHEN 'TN' THEN 'Tennessee'
      WHEN 'OR' THEN 'Oregon'
      WHEN 'MI' THEN 'Michigan'
      WHEN 'IN' THEN 'Indiana'
      WHEN 'MD' THEN 'Maryland'
      WHEN 'UT' THEN 'Utah'
        END AS StateName
FROM pubs.dbo.authors
ORDER BY au_lname
執行結果:
au_fname            au_lname                                   StateName 
-------------------- ---------------------------------------- ----------
Abraham             Bennet                                     California
Reginald            Blotchet-Halls                           Oregon
Cheryl              Carson                                     California
Michel              DeFrance                                   Indiana
Innes               del Castillo                             Michigan
Ann                  Dull                                        California

(4)   WHILE…CONTINUE…BREAK語句
WHILE<條件運算式>
BEGIN
     <命令列或程式塊>
     [BREAK]
     [CONTINUE]
     [命令列或程式塊]
END
WHILE語句在設定的條件為真時會重複執行命令列或程式塊。CONTINUE語句可以讓程式跳過CONTINUE語句之後的語句,回到WHILE迴圈的第一行。BREAK語句則讓程式完全跳出迴圈,結束WHILE迴圈的執行。WHILE語句也可以嵌套使用。
注意:如果嵌套了兩個或多個WHILE迴圈,內層的BREAK語句將導致退出到下一個外層迴圈。首先運行內層迴圈結束之後的所有語句,然後下一個外層迴圈重新開始執行。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/gloomylilac/archive/2007/12/17/1943386.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.