轉載必需注明出處:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/sqlserver-codeblock/
一、go語句
Go語句是SqlServer中用來表示當前代碼塊結束提交并確認結果的語句。
Go語句不能和其他Sql命令卸載同一行上!
定義的局部變量作用域局限在定義它的代碼快中,如:在go語句前定義的變量在go語句后面則不可用。
如果一次執行多個用go語句分開的代碼塊時,其中一個代碼塊出錯不會影響其他代碼塊的執行
?
二、Begin……End語句
T-Sql使用begin…end來指定代碼塊,但是在begin…end中聲明的變量在end結束之后還可以使用,直到遇見go語句
1 begin 2 declare @i int=0 3 select @i 4 end 5 select @i 6 go 7 select @i
三、If……eles語句
SQL中的If…else語句和其他編程語言中的語法一樣,Sql中的if…else可以不用添加括號。另外SQL中還有if?exists…else和if?not?exists…else的用法
--創建臨時表@table
1 declare @table table( Id int)2 insert into @table values(1)3 if( 1=1) 4 select * from @table5 else6 select 17 8 if exists( select * from @table)9 begin 10 select * from @table 11 end 12 13 if not exists( select * from @table) 14 begin 15 select * from @table 16 end
四、Case…When…then…else…end語句
Case具有兩種格式,簡單Case函數和Case搜索函數。
1 --簡單Case函數 2 CASE sex 3 WHEN '1' THEN '男' 4 WHEN '2' THEN '女' 5 ELSE '其他' END 6 --Case搜索函數 7 CASE WHEN sex = '1' THEN '男' 8 WHEN sex = '2' THEN '女' 9 ELSE '其他' END
上面兩種格式可以實現相同的功能,但是簡單的case相對來說寫法比較方便,但是他的功能也就有些限制,如對sex寫判斷比較的時候就只能選擇case搜素函數方式。如下:
1 CASE WHEN sex > 1 THEN '男' 2 WHEN sex < 2 THEN '女' 3 ELSE '其他' END
五、While語句
While循環主要是根據while后邊的值來判斷循環語句是否繼續執行,如下:
1 declare @var_a int = 10 2 while( @var_a > 0) 3 begin 4 select @var_a 5 set @var_a=@var_a-1 6 end
While循環語句通常和游標(cursor)一塊使用如:
1 declare MyCursor cursor for select Name from #table --定義游標,游標數據集來源臨時表#table2 open MyCursor --打開游標以供下面代碼使用3 fetch next from MyCursor into @name --將游標指向的值賦值給臨時變量@name,游標指向下一條數據4 while @@FETCH_STATUS=0 --判斷游標是否到最后一條記錄5 begin6 select @name7 fetch next from MyCursor into @name8 end9 close MyCursor --關閉游標 10 deallocate MyCursor -- 釋放最后的游標引用時