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
說明已經(jīng)出了i的作用域了。
那么我們要是在sql寫這么一段代碼會是什么情況呢?首先寫在if內(nèi)
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的幫助里發(fā)現(xiàn)這么一句話,備注的第三行“局部變量的作用域是其被聲明時所在批處理”
Msdn的地址:http://msdn.microsoft.com/zh-cn/library/ms188927.aspx
這行字在這么一大篇中還真挺不引人矚目。
現(xiàn)在我們知道原來declare變量的作用域是所在的批處理,if阻斷不了它的作用域,那上面我們的代碼if內(nèi)外的代碼都在一個批處理中,所以@test都是可用的且if里面設置的值還在。
下面我改造一下代碼,SQL中是以GO語句來區(qū)分批處理的
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這樣可以一次執(zhí)行兩條sql 語句
到此這篇關于SQL server中的declare變量用法的文章就介紹到這了,更多相關SQL server中的declare變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
sql2005 附加數(shù)據(jù)庫出錯(錯誤號:5123)解決方法
無法為此請求檢索數(shù)據(jù)。(Microsoft.SqlServer.SmoEnum)其他信息執(zhí)行Transact-Sql語句或批處理時發(fā)生了異常,Microsoft.SqlServer.ConnectionInfo)嘗試打開或創(chuàng)建物理文件d:\Data\***.mdf時,Create file遇到操作系統(tǒng)錯誤5(拒絕訪問。2012-07-07Sql server 備份還原后出現(xiàn) 受限制用戶 問題
怎么解決Sql Server 2005數(shù)據(jù)庫備份還原后出現(xiàn)“受限制用戶”,這是大家在數(shù)據(jù)庫備份還原后經(jīng)常遇到的問題,我們今天就來探討下.2020-03-03簡單實用SQL腳本Part SQLServer 2005 鏈接服務器
SQL Server 2005版本的SSMS中已經(jīng)有了 服務器對象->鏈接服務器 的功能點,用戶首先創(chuàng)建一個遠程DB的鏈接對象,之后就可以像本地表一樣執(zhí)行表的DML了。2010-09-09sql2008 附加數(shù)據(jù)庫時出現(xiàn)錯誤5123提示的解決方法
今天重裝了一下家里電腦的數(shù)據(jù)庫,在附加己有數(shù)據(jù)庫時,出現(xiàn)5123錯誤2011-11-11SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法
SQL Server 2005 引入幾個新的排序(排名)函數(shù),如ROW_NUMBER、RANK、DENSE_RANK等。這些新函數(shù)使您可以有效地分析數(shù)據(jù)以及向查詢的結果行提供排序值。2010-07-07PowerDesigner中如何導入SQL Server數(shù)據(jù)庫
這篇文章向我們介紹了如何導入SQL Server數(shù)據(jù)庫到PowerDesigner中的詳細步驟說明,并附帶圖片介紹,需要了解的朋友可以參考下2015-07-07