SQL中的declare用法

2022-02-26 08:29:46 字數 2513 閱讀 9981

平時寫sql查詢、儲存過程都是憑著感覺來,沒有**過sql的具體語法,一直都是按c#那一套往sql上模仿,前幾天專案中碰到乙個問題引起了我對declare定義變數的作用域的興趣。

大家都知道c#中的區域性變數,在if中如果我們定義乙個變數的話他的作用到if結束為止,if外是不識別這個變數的,else裡都不能使用,簡單的寫一下。

if(true)

這個i的作用域就是if裡面,如果我們在if外面用這個變數

if(true)

console.writeline(i);

那第二條輸出語句會報錯

the name 'i' does not exist in the current context

說明已經出了i的作用域了。

那麼我們要是在sql寫這麼一段**會是什麼情況呢?首先寫在if內 

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

end執行看結果輸出in if:1這是可以預想的結果。那我們在if外面使用變數@test試試。

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

endprint'out if:'+@test

這樣會是什麼結果呢,不知道大家怎麼想的,以我的大腦順勢就想到這應該報錯啊,出了變數的作用域了。實際結果不僅沒報錯而且@test的值還在。

in if:1

out if:1

看見這個結果當時我很鬱悶,sql太出人意料了。

在sql server 2005的幫助文件裡關於declare的幫助裡發現這麼一句話,備註的第三行「區域性變數的作用域是其被宣告時所在批處理」

這行字在這麼一大篇中還真挺不引人矚目。

現在我們知道原來declare變數的作用域是所在的批處理,if阻斷不了它的作用域,那上面我們的**if內外的**都在乙個批處理中,所以@test都是可用的且if裡面設定的值還在。

下面我改造一下**,sql中是以go語句來區分批處理的

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

endgo

print'out if:'+@test

這下對了,檢查語法後sql報錯「必須宣告標量變數"@test"」

平時寫sql查詢、儲存過程都是憑著感覺來,沒有**過sql的具體語法,一直都是按c#那一套往sql上模仿,前幾天專案中碰到乙個問題引起了我對declare定義變數的作用域的興趣。

大家都知道c#中的區域性變數,在if中如果我們定義乙個變數的話他的作用到if結束為止,if外是不識別這個變數的,else裡都不能使用,簡單的寫一下。

if(true)

這個i的作用域就是if裡面,如果我們在if外面用這個變數

if(true)

console.writeline(i);

那第二條輸出語句會報錯

the name 'i' does not exist in the current context

說明已經出了i的作用域了。

那麼我們要是在sql寫這麼一段**會是什麼情況呢?首先寫在if內 

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

end執行看結果輸出in if:1這是可以預想的結果。那我們在if外面使用變數@test試試。

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

endprint'out if:'+@test

這樣會是什麼結果呢,不知道大家怎麼想的,以我的大腦順勢就想到這應該報錯啊,出了變數的作用域了。實際結果不僅沒報錯而且@test的值還在。

in if:1

out if:1

看見這個結果當時我很鬱悶,sql太出人意料了。

在sql server 2005的幫助文件裡關於declare的幫助裡發現這麼一句話,備註的第三行「區域性變數的作用域是其被宣告時所在批處理」

這行字在這麼一大篇中還真挺不引人矚目。

現在我們知道原來declare變數的作用域是所在的批處理,if阻斷不了它的作用域,那上面我們的**if內外的**都在乙個批處理中,所以@test都是可用的且if裡面設定的值還在。

下面我改造一下**,sql中是以go語句來區分批處理的

if1=1

begin

declare@testvarchar

set@test='1'

print'in if:'+@test

endgo

print'out if:'+@test

這下對了,檢查語法後sql報錯「必須宣告標量變數"@test"」

Sql學習筆記 declare用法

栗子一 if 1 1 begin declare test varchar set test 1 print in if test end執行看結果輸出in if 1這是可以預想的結果。那我們在if外面使用變數 test試試。栗子二 if 1 1 begin declare test varchar...

mysql中declare語句用法

mysql中的declare語句是在復合語句中宣告變數的指令。1 example with two declare statements 兩個declare語句的例項 create procedure p8 begin declare a int declare b int set a 5 set ...

SQL中declare申明變數

在sql語句中加入變數。declare local variable data type 宣告時須要指定變數的型別,能夠使用set和select對變數進行賦值,在sql語句中就能夠使用 local variable來呼叫變數 宣告中能夠提供值,否則宣告之後全部變數將初始化為null。比如 decla...