主頁(yè) > 知識(shí)庫(kù) > SQLserver中的declare變量用法

SQLserver中的declare變量用法

熱門標(biāo)簽:九鹿林外呼系統(tǒng)怎么收費(fèi) 電銷機(jī)器人虛擬號(hào)碼 舞鋼市地圖標(biāo)注app 滄州營(yíng)銷外呼系統(tǒng)軟件 松原導(dǎo)航地圖標(biāo)注 沈陽(yáng)智能外呼系統(tǒng)代理 海南自動(dòng)外呼系統(tǒng)價(jià)格 浙江地圖標(biāo)注 創(chuàng)業(yè)電銷機(jī)器人

SQL中的declare用法

平時(shí)寫SQL查詢、存儲(chǔ)過(guò)程都是憑著感覺(jué)來(lái),沒(méi)有探究過(guò)SQL的具體語(yǔ)法,一直都是按c#那一套往SQL上模仿,前幾天項(xiàng)目中碰到一個(gè)問(wèn)題引起了我對(duì)declare定義變量的作用域的興趣。

大家都知道c#中的局部變量,在if中如果我們定義一個(gè)變量的話他的作用到if結(jié)束為止,if外是不識(shí)別這個(gè)變量的,else里都不能使用,簡(jiǎn)單的寫一下。

if(true)
{
Int32i=1;
Console.WriteLine(i);
}

這個(gè)i的作用域就是if里面,如果我們?cè)趇f外面用這個(gè)變量

if(true)
{
Int32i=1;
Console.WriteLine(i);
}
Console.WriteLine(i);

那第二條輸出語(yǔ)句會(huì)報(bào)錯(cuò)

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

說(shuō)明已經(jīng)出了i的作用域了。

那么我們要是在sql寫這么一段代碼會(huì)是什么情況呢?首先寫在if內(nèi)

IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END

  運(yùn)行看結(jié)果輸出in if:1這是可以預(yù)想的結(jié)果。那我們?cè)趇f外面使用變量@test試試。

IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END
PRINT'outif:'+@test

這樣會(huì)是什么結(jié)果呢,不知道大家怎么想的,以我的大腦順勢(shì)就想到這應(yīng)該報(bào)錯(cuò)啊,出了變量的作用域了。實(shí)際結(jié)果不僅沒(méi)報(bào)錯(cuò)而且@test的值還在。

in if:1

out if:1

看見(jiàn)這個(gè)結(jié)果當(dāng)時(shí)我很郁悶,SQL太出人意料了。

在SQL SERVER 2005的幫助文檔里關(guān)于declare的幫助里發(fā)現(xiàn)這么一句話,備注的第三行“局部變量的作用域是其被聲明時(shí)所在批處理”

Msdn的地址:http://msdn.microsoft.com/zh-cn/library/ms188927.aspx

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

現(xiàn)在我們知道原來(lái)declare變量的作用域是所在的批處理,if阻斷不了它的作用域,那上面我們的代碼if內(nèi)外的代碼都在一個(gè)批處理中,所以@test都是可用的且if里面設(shè)置的值還在。

下面我改造一下代碼,SQL中是以GO語(yǔ)句來(lái)區(qū)分批處理的

IF1=1
BEGIN
DECLARE@testVARCHAR
SET@test='1'
PRINT'inif:'+@test
END
GO
PRINT'outif:'+@test

這下對(duì)了,檢查語(yǔ)法后SQL報(bào)錯(cuò)“必須聲明標(biāo)量變量"@test"”

注:GO就是用于一個(gè)sql語(yǔ)句的結(jié)束 比如說(shuō)一個(gè)批處理語(yǔ)句是這樣的 select *from ,b select *from a 在后一個(gè)select后面加上一個(gè)GO這樣可以一次執(zhí)行兩條sql 語(yǔ)句

到此這篇關(guān)于SQL server中的declare變量用法的文章就介紹到這了,更多相關(guān)SQL server中的declare變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 簡(jiǎn)單實(shí)現(xiàn)SQLServer轉(zhuǎn)MYSQL的方法
  • SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作

標(biāo)簽:臺(tái)灣 西藏 商洛 寶雞 日喀則 公主嶺 咸寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLserver中的declare變量用法》,本文關(guān)鍵詞  SQLserver,中的,declare,變量,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLserver中的declare變量用法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SQLserver中的declare變量用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章