国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

SQL SERVER中的流程控制語句

瀏覽:113日期:2023-03-06 14:25:24
目錄
  • 批處理
  • 1、BEGIN...AND語句
  • 2、IF...ELSE語句
  • 3、 CASE語句
  • 4、 WHILE語句
  • 5、無條件退出語句RETURN
  • 6、無條件跳轉(zhuǎn)語句GOTO
  • 7、WAITFOR語句
    • 7.1 DELAY參數(shù)
    • 7.2 TIME參數(shù)

T-SQL中用來編寫流程控制模塊的語句有:BEGIN...AND語句、IF...ELSE語句、CASE語句、WHILE語句、GOTO語句、BREAK語句、WAITFOR語句和RETURN語句。

批處理

一個批處理段是由一個或者多個語句組成的一個批處理,之所以叫批處理是因?yàn)樗姓Z句一次性被提交到一個SQL實(shí)例。

  • 批處理是分批提交到SQL Server示例,因此在不同的批處理里局部變量不可訪問。
  • 在不同批處理中,流程控制語句不能跨批處理。
  • 如果想讓多個語句分多次提交到SQL實(shí)例,則需要使用GO關(guān)鍵字。GO關(guān)鍵字本身并不是一個SQL語句,GO關(guān)鍵字可以看作是一個批處理結(jié)束的標(biāo)識符,當(dāng)遇到GO關(guān)鍵字時,當(dāng)前GO之前的語句會作為一個批處理直接傳到SQL實(shí)例執(zhí)行。
DECLARE @i int;
  SET @i = 1;
  GO--分批了
  PRINT @i  --@i在這個批里未定義

1、BEGIN...AND語句

語句塊是多條Transact-SQL語句組成的代碼段,從而可以執(zhí)行一組Transact-SQL語句。經(jīng)常與while或if...else組合起來使用,可以相互嵌套。

示例:

DECLARE @count INT
SELECT @count = 0
WHILE @count < 10
BEGIN
    PRINT "count = " + CONVERT(VARCHAR(10), @count)
    SELECT @count = @count + 1
END

PRINT "loop finished, count = " + CONVERT(VARCHAR(10), @count)

2、IF...ELSE語句

IF...ELSE語句用于在執(zhí)行一組代碼之前進(jìn)行條件判斷,根據(jù)判斷的結(jié)果執(zhí)行不同的代碼。IF...ELSE語句語句對布爾表達(dá)式進(jìn)行判斷,如果布爾表達(dá)式返回為TRUE,則執(zhí)行IF關(guān)鍵字后面的語句塊;如果布爾表達(dá)式返回FALSE,則執(zhí)行 ELSE關(guān)鍵字后面的語句塊。

語法:

IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ]

示例:

DECLARE @score INT
SET @score = 100
IF @score >= 60
    PRINT "及格"
ELSE
    PRINT "不及格"

3、 CASE語句

CASE語句是多條件分支語句,相比IF...ELSE語句,CASE語句進(jìn)行分支流程控制可以使代碼更加清晰,易于理解。CASE語句根據(jù)表達(dá)式邏輯值的真假來決定執(zhí)行的代碼流程。

語法:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

示例:

DECLARE @score INT
SET @score = 100

SELECT CASE @score 
    WHEN 100 THEN "滿分"
    WHEN 60 THEN "及格"
END
AS "成績"

或者

DECLARE @score INT
SET @score = 100

SELECT CASE 
    WHEN @score >= 90 THEN "優(yōu)秀"
    WHEN @score >= 80 THEN "良好"
    WHEN @score >= 70 THEN "中等"
    WHEN @score >= 60 THEN "及格"
    ELSE "不及格"
END
AS "成績"

4、 WHILE語句

WHILE語句根據(jù)條件重復(fù)執(zhí)行一條或多條T-SQL代碼,只要條件表達(dá)式為真,就循環(huán)執(zhí)行語句。可以使用 BREAK 和 CONTINUE 關(guān)鍵字在循環(huán)內(nèi)部控制 WHILE 循環(huán)中語句的執(zhí)行。

語法:

WHILE Boolean_expression 
     { sql_statement | statement_block | BREAK | CONTINUE }

參數(shù):

  • Boolean_expression:返回 TRUE 或 FALSE 的表達(dá)式。 如果布爾表達(dá)式中含有 SELECT 語句,則必須用括號將 SELECT 語句括起來。
  • {sql_statement | statement_block}:Transact-SQL 語句或用語句塊定義的語句分組。 若要定義語句塊,請使用控制流關(guān)鍵字 BEGIN 和 END。
  • BREAK:導(dǎo)致從最內(nèi)層的 WHILE 循環(huán)中退出。 將執(zhí)行出現(xiàn)在 END 關(guān)鍵字(循環(huán)結(jié)束的標(biāo)記)后面的任何語句。
  • CONTINUE:使 WHILE 循環(huán)重新開始執(zhí)行,忽略 CONTINUE 關(guān)鍵字后面的任何語句。
DECLARE @i int;
SET @i = 0;
WHILE(@i < 10)
BEGIN
    SET @i = @i + 1;
    IF(@i % 2 = 0)
    BEGIN
PRINT("跳過2的倍數(shù)" + CAST(@i AS varchar));
CONTINUE;
    END
    ELSE IF (@i = 7)
    BEGIN
PRINT("到" + CAST(@i AS varchar) + "就跳出循環(huán)");
BREAK;
    END
    PRINT @i;
END

5、無條件退出語句RETURN

RETURN語句用于使程序從一個查詢、存儲過程或批量處理中無條件返回,其后面的語句不再執(zhí)行。如果在存儲過程中使用return語句,那么此語句可以指定返回給調(diào)用應(yīng)用程序、批處理或過程的負(fù)整數(shù);如果沒有為return指定整數(shù)值,那么該存儲過程將返回0。

BEGIN
    PRINT(1);
    PRINT(2);
    RETURN;
    PRINT(3);    --在RETURN之后的代碼不會被執(zhí)行,因?yàn)闀^當(dāng)前批處理
END
GO
BEGIN
    PRINT(4);
END

6、無條件跳轉(zhuǎn)語句GOTO

GOTO語句可以使程序無條件跳轉(zhuǎn)到指定的程序執(zhí)行點(diǎn),增加了程序設(shè)計(jì)的靈活性。但破壞了程序的結(jié)構(gòu)化,使程序結(jié)構(gòu)變得復(fù)雜而且難以測試。

使用說明:語句標(biāo)識符可以是數(shù)字或者字母的組合,但必須以":"結(jié)束。而在GOTO語句后的標(biāo)識符不必帶":"。

注意事項(xiàng):GOTO語句和跳轉(zhuǎn)標(biāo)簽可以在存儲過程、批處理或語句塊中的任何地方使用,但不能超出批處理的范圍。

DECLARE @i int;

SET @i = 1;
SET @i = 2;
SET @i = 3;
SET @i = 4;
GOTO ME;
SET @i = 5;  --這行被跳過了
SET @i = 6;  --這行被跳過了
SET @i = 7;  --這行被跳過了

ME:PRINT("跳到我了?");
PRINT @i

輸出結(jié)果如下:

跳到我了?
4

7、WAITFOR語句

waitfor語句用于掛起語句的執(zhí)行,直到指定的時間點(diǎn)或者指定的時間間隔。

語法:

WAITFOR 
{
    DELAY "time_to_pass" 
  | TIME "time_to_execute" 
  | [ ( receive_statement ) | ( get_conversation_group_statement ) ] 
    [ , TIMEOUT timeout ]
}

在waitfor語句中不能包含打開游標(biāo),定義視圖這樣的操作。在包含事務(wù)的語句中不要使用waitfor語句,因?yàn)閣aitfor語句在時間點(diǎn)或時間間隔執(zhí)行期間將一直擁有對象的鎖,當(dāng)事務(wù)中包含waitfor語句,事務(wù)的其他語句又需要訪問被鎖住的數(shù)據(jù)對象事就容易發(fā)生死鎖現(xiàn)象。

7.1 DELAY參數(shù)

DELAY參數(shù)指定了等待的時間段。不能指定天數(shù),只能指定小時數(shù)、分鐘數(shù)和秒數(shù)。允許延遲的最長時間為24小時。

WAITFOR DELAY "01:00"

將運(yùn)行WAITFOR語句前的任何代碼,然后到達(dá)WAITFOR語句,停止1小時,之后繼續(xù)執(zhí)行下一條語句中的代碼。

7.2 TIME參數(shù)

TIME參數(shù)指定到達(dá)指定時間的等待時間。

WAITFOR TIME "01:00"

將運(yùn)行WAITFOR語句前的任何代碼,然后到達(dá)WAITFOR語句,直到凌晨1點(diǎn)停止執(zhí)行,之后執(zhí)行WAITFOR語句后的下一條語句。

到此這篇關(guān)于SQL SERVER流程控制語句的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

標(biāo)簽: MsSQL
相關(guān)文章:
主站蜘蛛池模板: 欧美性高清bbbbbbxxxxx | 久久综合精品视频 | 222aaa天堂| 成人18免费视频 | 久久国产一级毛片一区二区 | 国产亚洲欧美另类久久久 | 奇米5555 | 日本美女黄色一级片 | 亚洲系列中文字幕一区二区 | 国产亚洲高清视频 | 成人免费小视频 | 在线视频欧美日韩 | 精品国产高清在线看国产 | 午夜精品免费 | 欧美在线观看一区 | 看真人一级毛片 | 成人在线观看不卡 | 一级做a爱过程免费观看 | 国产精品毛片一区二区三区 | 久久久久久福利 | 一级特色黄大片 | 国产亚洲高清不卡在线观看 | 狠狠色丁香婷婷综合小时婷婷 | 国产高清视频免费观看 | 国内精品九一在线播放 | 99久热在线精品视频观看 | 久久性妇女精品免费 | 精品在线小视频 | 久久福利青草精品资源站免费 | 亚洲欧美中文字幕在线网站 | 国产成人综合高清在线观看 | 成人α片 | 美女黄网站色一级毛片 | 撸天堂 | 美女免费在线视频 | 俺来也欧美亚洲a∨在线 | 久久狠狠色狠狠色综合 | 91原创视频在线观看 | 欧美野外性k8播放性迷宫 | 国产一国产a一级毛片 | 高清成人 |