sql server 變數宣告 設定 使用 輸出

2022-02-15 12:49:42 字數 3139 閱讀 5018

本文面向對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 變數名...