超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

SQL中的declare用法、作用域

freeflydom
2024年11月16日 8:13 本文熱度 1506

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

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

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

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

if (true)
{
    Int32 i = 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寫(xiě)這么一段代碼會(huì)是什么情況呢?首先寫(xiě)在if內(nèi)  

IF 1=1
BEGIN
    DECLARE @test VARCHAR
    SET @test='1'   
    PRINT 'in if:'+@test
END

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


IF 1=1
BEGIN
   DECLARE @test VARCHAR
   SET @test='1'   
   PRINT 'in if:'+@test
END
PRINT 'out if:'+@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)這么一句話(huà),備注的第三行“局部變量的作用域是其被聲明時(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ū)分批處理的 


IF 1=1
BEGIN
   DECLARE @test VARCHAR
   SET @test='1'   
   PRINT 'in if:'+@test
END
GO
PRINT 'out if:'+@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ǔ)句

轉(zhuǎn)自https://www.cnblogs.com/hushzhang/p/6699226.html


該文章在 2024/11/16 9:30:06 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved