簡單介紹SQLserver中的declare變數用法
導讀 | 這篇文章主要介紹了SQLserver中的declare變數用法,sql中declare是宣告的意思,就是宣告變數的,這個一般是用在函式和儲存過程中的。感興趣的可以來了解一下 |
平時寫SQL查詢、儲存過程都是憑著感覺來,沒有探究過SQL的具體語法,一直都是按c#那一套往SQL上模仿,前幾天專案中碰到一個問題引起了我對declare定義變數的作用域的興趣。
大家都知道c#中的區域性變數,在if中如果我們定義一個變數的話他的作用到if結束為止,if外是不識別這個變數的,else裡都不能使用,簡單的寫一下。
if(true) { Int32i=1; Console.WriteLine(i); }
這個i的作用域就是if裡面,如果我們在if外面用這個變數
if(true) { Int32i=1; Console.WriteLine(i); } 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'inif:'+@test END
執行看結果輸出in if:1這是可以預想的結果。那我們在if外面使用變數@test試試。
IF1=1 BEGIN DECLARE@testVARCHAR SET@test='1' PRINT'inif:'+@test END PRINT'outif:'+@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'inif:'+@test END GO PRINT'outif:'+@test
這下對了,檢查語法後SQL報錯“必須宣告標量變數"@test"”
注:GO就是用於一個sql語句的結束 比如說一個批處理語句是這樣的 select *from ,b select *from a 在後一個select後面加上一個GO這樣可以一次執行兩條sql 語句
到此這篇關於SQL server中的declare變數用法的文章就介紹到這了。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2852456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript 變數簡單介紹JavaScript變數
- 簡單介紹nginx 變數使用Nginx變數
- javascript變數宣告簡單介紹JavaScript變數
- javascript變數汙染簡單介紹JavaScript變數
- javascript的this用法簡單介紹JavaScript
- 簡單介紹Lua中的變數與賦值方法變數賦值
- js迴圈中reduce的用法簡單介紹JS
- javascript變數作用於簡單介紹JavaScript變數
- javascript變數宣告提升簡單介紹JavaScript變數
- javascript中的就加號+的用法簡單介紹JavaScript
- jQuery filter() 用法簡單介紹jQueryFilter
- js WebSocket用法簡單介紹JSWeb
- javascript arguments用法簡單介紹JavaScript
- onerror事件用法簡單介紹Error事件
- angularJS的router用法簡單介紹AngularJS
- javascript的分號(;)用法簡單介紹JavaScript
- <input type="number" >用法簡單介紹
- css 註釋用法簡單介紹CSS
- style.cssText用法簡單介紹CSS
- javascript with()語句用法簡單介紹JavaScript
- outerHTML屬性用法簡單介紹HTML
- 簡單介紹Python中異常處理用法Python
- js isNaN函式的用法簡單介紹JSNaN函式
- js中大括號{}的用法簡單介紹JS
- jQuery的index()函式用法簡單介紹jQueryIndex函式
- js eval()函式的用法簡單介紹JS函式
- div和span元素的用法簡單介紹
- meta標籤的viewport用法簡單介紹View
- javascript將浮點數數變為整數簡單介紹JavaScript
- CSS3 calc()用法簡單介紹CSSS3
- javascript innerText屬性用法簡單介紹JavaScript
- javascript call()函式用法簡單介紹JavaScript函式
- contenteditable屬性用法簡單介紹
- javascript trim()函式用法簡單介紹JavaScript函式
- getFullYear()函式用法簡單介紹函式
- js style.cssText用法簡單介紹JSCSS
- js isPrototypeOf()函式用法簡單介紹JS函式
- opacity屬性用法簡單介紹