標籤:avg end ascii color 指令碼 種類 var 技術分享 --
* SqlServer相比MySQLMySQL不支援交易處理,沒有視圖,沒有預存程序和觸發器,沒有資料庫端的使用者自訂函數,不能完全使用標準的SQL文法
* 所以在這裡我使用 SQL Server 2014 Management Studio來完成一些SQL Server的工作
T-SQL 編碼
1:局部變數和全域變數
* 全域變數由系統提供且預先聲明,通過在變數名前面添加“@@”符號區別於局部變數。使用者只能使用全域變數不能修改全域變數的值。全域變數的作用範圍是整個SQL Server系統
* 局部變數由使用者自己定義,通過在變數名前面添加“@”符號區別於全域變數
例1:聲明一個變數@testDateTime,將getdate()函數的值放入變數中,最後輸出變數@testDateTime的值
declare @testDateTime varchar(30)select @testDateTime = getdate() select @testDateTime as ‘目前時間‘go
運行結果
例2:聲明一個變數@getAge,將mytestuser表裡面id是2的欄位的age的值放入變數@getAge中,最後輸出@getAge的值
declare @getAge intselect @getAge = age from mytestuser where id=2select @getAge as ‘2號的年齡‘go
運行結果
2:使用運算子
例1:將運算式67%31的值賦給變數@result
declare @result intselect @result = 67%31select @result as ‘結果‘go
運行結果
例2:定義變數x和y,給變數賦值,然後求兩個變數的與、或、異或的結果
declare @x int, @y intset @x = 2set @y = 7select @x & @y as ‘與‘, @x | @y as ‘或‘, @x ^ @y as ‘異或‘
運行結果
例3:定義變數x和y,給變數賦值,然後求兩個變數中較小的一個
declare @x int, @y intset @x = 12set @y = 7if @x < @yselect @x as ‘小資料‘elseselect @y as ‘小資料‘
運行結果
例4:使用串連運算子(+)將兩個字串串連起來
--需要注意的是變數x的長度,如果長度不夠,就不能完整的顯示資料declare @x varchar(70)set @x = ‘米諾八慈‘+‘的‘+‘部落格園‘select @x as ‘資料連線的結果‘
運行結果
3:case語句
例1:如果年齡小於20歲顯示“少年”,如果年齡在20歲到30歲之間顯示“青年”,如果年齡在30歲以上顯示“中年”
/*需要注意的是1:在case和欄位之間是有逗號隔開的2:在when then之間不能使用&&表示並且,所以可以將條件倒置,以避免出現age<30&&age>20*/select name,age,case when age>30 then ‘中年‘when age>20 then ‘青年‘when age<20 then ‘少年‘end as levelfrom mytestuser
運行結果
4:while表示迴圈
例1:顯示字串“米諾八慈”中的每一個字元以及其ASCII碼
declare @position int,@str varchar(10)set @position = 1 --需要注意的是在SQL裡面字串的從1開始取值set @str = ‘米諾八慈‘while @position <=DATALENGTH(@str)--這裡的長度是8 begin select SUBSTRING(@str,@position,1), ascii(SUBSTRING(@str,@position,1)) set @position =@position+1 end
運行結果
5:result語句
result可以從查詢或過程中無條件退出,可在任何時候從過程、批處理或語句塊中退出,而不執行result之後的語句
例1:通過預存程序求使用者平均年齡
--刪除預存程序drop procedure mypro--建立預存程序create procedure mypro @num intas return(select avg(age) from mytestuser where id < @num)--建立查詢declare @avg int ,@number intset @number = 4exec @avg = mypro @number --將變數num的值傳入預存程序並將預存程序的結果賦給變數avgselect @avg as ‘平均年齡‘
以上SQL語句一個一個的執行,執行建立查詢的結果
使用者自訂函數
例1:建立一個函數用於顯示出較大的年齡的使用者資訊
--刪除函數drop function showMax--建立函數create function showMax(@id1 int,@id2 int) returns varchar(50) --函數名--函數體as begin declare @result varchar(50),@name1 varchar(10),@name2 varchar(10),@age1 varchar(10),@age2 varchar(10) select @age1 = age,@name1 = name from mytestuser where id = @id1 select @age2 = age,@name2 = name from mytestuser where id = @id2 if (@age1<@age2) set @result = @name2 +‘的年齡是:‘+ @age2 else set @result = @name1 +‘的年齡是:‘+ @age1 return @result end/*需要注意的是:1:在函數名裡面聲明了id1和id2,在函數體裡面就不需要聲明可以直接使用了2:必須要用@age1 varchar(10),@age2 varchar(10)將int類型轉換成varchar類型,以便與@name2 +‘的年齡是:‘相連*/--使用函數select dbo.showMax(3,4) as maxMess
運行結果
遊標
遊標實際上就是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制
1:遊標的類型
1:T-SQL遊標
主要用於T-SQL指令碼,預存程序和觸發器。主要用在伺服器上,由用戶端發送給伺服器的T-SQL語句或批處理、預存程序、觸發器中的T-SQL進行管理。不支援提取資料區塊或多行資料
2:API遊標
主要哦用在伺服器上
3:客戶遊標
主要是當在客戶機上緩衝結果集時使用
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------由於T-SQL遊標和API遊標使用在伺服器端上,也叫作伺服器資料指標或後台遊標。用戶端資料指標又被稱為前台遊標
伺服器資料指標包含:靜態資料指標、動態資料指標、順向資料指標、鍵集驅動遊標4種類型
2:遊標的5種操作
聲明遊標 --> 開啟遊標 --> 讀取遊標 --> 關閉遊標(如果不關閉遊標,其他人就可以進入,非常危險) --> 釋放遊標
SQL學習2