四、流程式控制制

一、選擇分之結構

(1)某用戶銀行卡號為「6225547854125656」,該用戶執行取錢操作,取錢5000元,餘額充足則進行取錢操作,並提示”取錢成功”,否則提示「餘額不足」。

declare @balance money
select @balance = (select CardMoney from BankCard where CardNo='6225547854125656')
if @balance >= 5000
	begin
		update BankCard set CardMoney = CardMoney - 5000
		insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
		values('6225547854125656',0,5000,GETDATE())
	end
else
	print '餘額不足'

(2)查詢銀行卡資訊,將銀行卡狀態1,2,3,4分別轉換為漢字「正常,掛失,凍結,註銷」,並且根據銀行卡餘額顯示銀行卡等級 30萬以下為「普通用戶」,30萬及以上為”VIP用戶”,顯示列分別為卡號,身份證,姓名,餘額,用戶等級,銀行卡狀態。

select CardNo 卡號,AccountCode 身份證,RealName 姓名,CardMoney 餘額,
case
	when CardMoney < 300000 then '普通用戶'
	else 'VIP用戶' 
end 用戶等級,
case
	when CardState = 1 then '正常'
	when CardState = 2 then '掛失'
	when CardState = 3 then '凍結'
	when CardState = 4 then '註銷'
	else '異常'
end 卡狀態
from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId

或如下寫法:

select CardNo 卡號,AccountCode 身份證,RealName 姓名,CardMoney 餘額,
case
	when CardMoney < 300000 then '普通用戶'
	else 'VIP用戶' 
end 用戶等級,
case CardState
	when 1 then '正常'
	when 2 then '掛失'
	when 3 then '凍結'
	when 4 then '註銷'
	else '異常'
end 卡狀態
from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId

二、循環結構

(1)循環列印1-10。

declare @i int  = 1
while @i <= 10
begin
	print @i
	set @i = @i + 1
end

(2)循環列印九九乘法表

declare @i int = 1
declare @str varchar(1000)
while @i<=9
begin
	declare @j int = 1
	set @str = ''
	while @j <= @i
	begin
		--方案一
		--set @str = @str + cast(@i as varchar(2)) + '*' + cast(@j as varchar(2)) + 
		--'=' + cast(@i*@j as varchar(2)) + CHAR(9)
		--方案二
		set @str = @str + Convert(varchar(2),@i) + '*' + Convert(varchar(2),@j) + 
		'=' + Convert(varchar(2),@i*@j) + CHAR(9)		
		set @j = @j + 1
	end
	print @str
	set @i = @i + 1
end

備註:

(1)特殊字元:製表符 CHAR(9);換行符 CHAR(10);回車 CHAR(13);

(2)循環中若出現break和CONTINUE,作用與Java,C#等語言一致。