SQL中的declare用法

來源:互聯網
上載者:User

標籤:SQ   一句話   情況   write   複製   代碼   div   原來   console   

 

平時寫SQL查詢、預存程序都是憑著感覺來,沒有探究過SQL的具體文法,一直都是按c#那一套往SQL上模仿,前幾天項目中碰到一個問題引起了我對declare定義變數的範圍的興趣。

大家都知道c#中的局部變數,在if中如果我們定義一個變數的話他的作用到if結束為止,if外是不識別這個變數的,else裡都不能使用,簡單的寫一下。

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

這個i的範圍就是if裡面,如果我們在if外面用這個變數

 

 

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

 

那第二條輸出語句會報錯

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

說明已經出了i的範圍了。

那麼我們要是在sql寫這麼一段代碼會是什麼情況呢?首先寫在if內 

 

IF 1=1
BEGIN
    DECLARE @test VARCHAR
    SET @test=‘1‘   
    PRINT ‘in if:‘[email protected]
END

 

  運行看結果輸出in if:1這是可以預想的結果。那我們在if外面使用變數@test試試。

  

 

 

IF 1=1
BEGIN
   DECLARE @test VARCHAR
   SET @test=‘1‘   
   PRINT ‘in if:‘[email protected]
END
PRINT ‘out if:‘[email protected]

 

這樣會是什麼結果呢,不知道大家怎麼想的,以我的大腦順勢就想到這應該報錯啊,出了變數的範圍了。實際結果不僅沒報錯而且@test的值還在。

 in if:1

 out if:1

看見這個結果當時我很鬱悶,SQL太出人意料了。

在SQL SERVER 2005的協助文檔裡關於declare的協助裡發現這麼一句話,備忘的第三行“局部變數的範圍是其被聲明時所在批處理”

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

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

現在我們知道原來declare變數的範圍是所在的批處理,if阻斷不了它的範圍,那上面我們的代碼if內外的代碼都在一個批處理中,所以@test都是可用的且if裡面設定的值還在。

下面我改造一下代碼,SQL中是以GO語句來區分批處理的

 

IF 1=1
BEGIN
   DECLARE @test VARCHAR
   SET @test=‘1‘   
   PRINT ‘in if:‘[email protected]
END
GO
PRINT ‘out if:‘[email protected]

 

 

這下對了,檢查文法後SQL報錯“必須聲明標量變數"@test"”

SQL中的declare用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.