平時寫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...