本文面向對sql server中變數操作不熟悉的使用者,希望能使他們在看完本文後能對變數操作有具體和全面的認識。
在學習sql server的過程中,很多時候需要對某些單獨的值進行除錯,這時就需要在sql server中對變數進行操作。
變數能進行的操作分定義、賦值、使用三種,下面以一段簡短的**作為示例:
--定義乙個名稱為@i的變數,指定其型別為整數
declare @i int
--對變數@i賦值為
set @i=3
--輸出@i的值
select @i
這就是乙個最簡單的變數操作,包含上述全部三種型別。但變數能進行的操作遠不止於此,下面分別進行描述:
變數宣告:
變數宣告的第一部分為關鍵字declare,寫在最前面。
變數宣告的第二部分為變數名稱,必須以@開頭,後面可以跟字母、數字、中文和非系統運算子的字元,如@、$、_等。
變數宣告的第三部分為變數型別,可以定義sql server中的所有常規型別,包括各種數字型別、字串型別、時間型別等,只有極少數特殊資料型別無法在變數中定義。
·變數的三個部分用分隔符分開,分隔符可以由多個空格、tab製表符、換行符組成。
·變數名稱的大小寫不區分,@a和@a指向同乙個變數,不能重複定義。關鍵字和資料型別也是大小定不區分,含義相同。
·多個變數同時定義用逗號分隔多個變數名稱和型別。如declare @a int,@b varchar(50)。
·定義的變數的生命週期為同一批次或儲存過程,即:在你執行的同一批語句(也就是執行時選擇的所有語句)或儲存過程中,定義的變數都可以使用,變數名稱必須唯一。
下面給出常用的變數定義寫法,以下變數的宣告方式都是合法的:
declare @a int,@b int
--最常見的寫法
set @a=1
--如果寫set @a='xx'會報錯,因為xx是字串且無法隱式轉換為數字
set @a='23'
--用標量值函式賦值
set @a=dbo.fun_1(@a)
--用子查詢賦值
set @a=(select max(number) from master..spt_values)
--用其它函式賦值
set @a=@b
--用表示式賦值
set @a=@b*5+dbo.fun_1(@a)-(select max(number) from master..spt_values)
變數賦值
變數的賦值有多種方式,最常見的方式是以下四種:
set賦值
對單個變數賦值可以使用set,基本寫法如下:
set @a='xyz'
需要注意的地方有:
·set後的變數名稱必須在本批次中已定義,大小寫不限。
·=號後面可以寫數字、字元、標量值函式、返回一行一列的子查詢、其它變數、表示式等,但不能寫儲存過程。
·=號後返回的資料型別必須與變數的資料相同,或能隱式轉換成變數的資料型別
·set後的變數名稱必須在本批次中已定義,大小寫不限。
下面給出常見的set賦值寫法:
declare @a int,@b int
--最常見的寫法
set @a=1
--如果寫set @a='xx'會報錯,因為xx是字串且無法隱式轉換為數字
set @a='23'
--用標量值函式賦值
set @a=dbo.fun_1(@a)
--用子查詢賦值
set @a=(select max(number) from master..spt_values)
--用其它函式賦值
set @a=@b
--用表示式賦值
set @a=@b*5+dbo.fun_1(@a)-(select max(number) from master..spt_values)
select賦值
select可以被認為是基於set的強化賦值方式,以下寫法與上面set的基本寫法完全等效:
select @a='xyz'
select還可以對多個變數同時賦值:
select @a='xyz',@b='cc'
select還可以用查詢的結果集對變數賦值:
select @a=name,@b=name+'x'
from tb_class
where name like '%%'
輸出引數賦值
在定義儲存過程時可以將傳入的引數設定為輸出引數,然後在其中為其賦值。下面是乙個簡短的例子:
create procedure proc_test(
@i int output
asset @i=@i+1
godeclare @j int
set @j=5
exec proc_test @j output
exec proc_test @j output
select @j
--7需要注意的是在儲存過程的定義中和執行儲存過程的語句中,output關鍵字都是必須的,不然無法返回引數。
update賦值
update裡除了可以給列賦新值,還能給變數賦值,這裡就涉及到一些底層的知識和高階的用法,這裡不多說,只看示例即可:
declare @i int
update tb set col1='a',@i=1
update tb set col1='b',@i=len(col1) where col1 like '%%'
變數使用
變數可用的地方很多,在除錯函式、儲存過程、查詢時都會用到,只要能用表示式的地方基本上都能用變數。以下是幾個典型用法:
declare @i int
set @i=1
--直接輸出變數
select @i
--使用變數除錯函式
select dbo.fun_test2(@i)
--使用變數作為儲存過程的輸入引數
exec proc_test @i
--查詢中使用變數
select *
from tb
where col1>@i
--更新中使用變數
update tb set col1=@i
where col1<>@i
以上就是變數使用的全部說明,希望能為讀者帶來幫助。
sql server 變數宣告 設定 使用 輸出
本文面向對sql server中變數操作不熟悉的使用者,希望能使他們在看完本文後能對變數操作有具體和全面的認識。在學習sql server的過程中,很多時候需要對某些單獨的值進行除錯,這時就需要在sql server中對變數進行操作。變數能進行的操作分定義 賦值 使用三種,下面以一段簡短的 作為示例...
宣告變數 如果同時宣告多個變數
如果同時宣告多個變數,可以用以下語句 也可以按如下宣告 dim a as integer,b as integer,c as integer但是不可以按如下宣告 dim a,b,c as integer 如果這樣操作,僅有c宣告正確。如何檢查是否宣告成功呢?可以使用typename函式來判斷。msg...
php宣告變數開頭,php變數宣告
1 什麼是變數?變數就是可變的量,我們可以把它看做是?個容器之所以叫做變數。是因為一旦被宣告後在整個指令碼中都會可以動態的改變變數的值。2 變數的命名規範 1 以 開頭 2 由字母數字下劃線組成,但是不能以數字開頭 3 可以使用中文,但是不推薦使yongoing 4 變數名嚴格區分大小寫 5 變數名...