R
if begin-end elsecase when-then-else endwhile begin-end
特殊字符:
- Tab:
char(9) - 換行:
char(10) - ENTER
char(13)
選擇分支結構
if else
1
2
3
4
5
6
| if
begin
end
else
begin
end
|
case end
1
2
3
4
| case
when 條件判斷 then 成立要做的事
else 不成立要做的事,或是以上都不是,不知道什麼狀況
end 欄位別名
|
循環結構 While
1
2
3
4
5
| declare @i int = 1--宣告i初始值為1
while @i<= 10 --當i<=10時,就執行
begin
--TODO something
end
|
模擬銀行業務
選擇分支結構
範例1:取錢
(1)某用戶銀行卡號為”999998888802”
該用戶執行取錢操作,取錢5000元,餘額充足則進行取錢操作
並提示”取錢成功”,否則提示”餘額不足”。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| --(1)某用戶銀行卡號為"999998888802"
--該用戶執行取錢操作,取錢5000元,餘額充足則進行取錢操作
--並提示"取錢成功",否則提示"餘額不足"。
select * from AccountInfo
select * from BankCard
select * from CardExchange
declare @balance money--定義餘額變量
select @balance = (select CardMoney from BankCard where CardNo = '999998888802')--將查詢到的餘額放到@balance變量中
if @balance > 5000 --判斷卡餘額是否大於5000
begin--可以取錢
--取錢
update BankCard
set CardMoney = CardMoney - 5000
where CardNo = '999998888802'
--添加交易記錢
insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
values('999998888802',0,5000,GETDATE())
--提示成功
print '取錢成功'
end
else--不能取錢
begin
print '餘額不足'
end
|
先為餘額定義一個變量@balance,數據類型money,再select 卡的餘額給變量@balance,判斷餘額是否大於5000,成立就取錢,卡餘額要減5000(update set where),再添加交易記錄CardExchange(inert into),並提示”取錢成功”,不成立就提示”餘額不足”.
範例2:查詢case when+inner jonin
(2)查詢銀行卡信息,將銀行卡狀態1,2,3,4分別轉換為中文,1.正常2.掛失3.凍結4.註銷
並且根據銀行卡餘額顯示銀行卡等級
30萬二下為”普通用戶”,30萬以上為”VIP用戶”
顯示列分別為:卡號、身份証、姓名、餘額、用戶等級、銀行卡狀態
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| --(2)查詢銀行卡信息,將銀行卡狀態1,2,3,4分別轉換為中文,1.正常2.掛失3.凍結4.註銷
--並且根據銀行卡餘額顯示銀行卡等級
--30萬二下為"普通用戶",30萬以上為"VIP用戶"
--顯示列分別為:卡號、身份証、姓名、餘額、用戶等級、銀行卡狀態
select CardNo 卡號, AccountCode 身份証, RealName 姓名, CardMoney 餘額,
case --用戶等級
when CardMoney > 300000 then 'VIP用戶'--範圍的判斷,不能像下面這樣寫
else '普通用戶'
end 用戶等級,--欄位別
case CardState--欄位名
when 1 then '正常' --相等關係CardState = 1,欄位名可以寫在case後面,when後面直接寫結果1
when 2 then '掛失'
when 3 then '凍結'
when 4 then '註銷'
else '異常'--以上都不是,不知道什麼狀況
end 銀行卡狀態
from BankCard
inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
|
使用inner join 結合兩張表,case when(類似switch case)去顯示銀行卡狀態,
case-end 中的 when-then若是相等關係(CardState=1),欄位名可以寫在case後面,when後面直接寫結果1。case-end 中的 when-then若是範圍的判斷(CardMoney>300000),就不能這樣簡寫。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| --一般寫法如下:
case
when CardState = 1 then '正常'
when CardState = 2 then '掛失'
end
--相等關係(CardState=1),欄位名可以寫在case後面,when後面直接寫結果1
case CardState --欄位名
when 1 then '正常'
when 2 then '掛失'
end
--範圍的判斷(CardMoney>300000),不能像上面面這樣寫
case
when CardMoney > 300000 then 'VIP用戶'
else --以上都不是要做的事
end
|
循環結構 While
範例1:循環印出1-10
1
2
3
4
5
6
7
| --(1)循環印出1-10
declare @i int = 1 --宣告i初始值為1
while @i <= 10 --當i<=1時就執行
begin
print @i --印出i
set @i = @i + 1 --設置i+=1
end
|
範例2:循環印出99乘法表
特殊字符:
- Tab:
char(9) - 換行:
char(10) - ENTER
char(13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| --(2)循環印出99乘法表
declare @i int = 1--宣告變數i初始值為1
while @i <= 9--外迴圈,當i<=9時執行
begin
declare @str varchar(1000) = ''--宣告變數str,用來組字串
declare @j int = 1--宣告變數j初始值為1
while @j <= @i--內迴圈,當j<=i時執行
begin
--組字串
set @str = @str + cast(@j as varchar(1)) + '*' + cast(@i as varchar(1))+ '=' + cast(@i*@j as varchar(2)) + char(9)--char(9)為特殊字符:Tab鍵
set @j = @j + 1--設置j+1
end
print @str--印出內迴圈組的字串,print會自動換行
set @i = @i + 1--設置i+1
end
|