SQLSERVER 的bug,SQLSERVERbug

來源:互聯網
上載者:User

SQLSERVER 的bug,SQLSERVERbug
今天客戶回函發現MS SQL裡面有個bug,問題還蠻大所以發出來做個標記:
開啟sql的查詢時段,貼入代碼如下:

declare @i intset @i = 1while @i<5 --迴圈執行4次begin declare @aa varchar(1)  --定義變數 print convert(varchar(1),@i)+'--'+isnull(@aa,'')  --列印變數 select @aa='0' where 1>2  --判斷如果1大於2則賦值給變數,判斷不成立所以變數還是沒有賦值 if @aa is null  --如果變數沒有取到值,則將變數賦值為1 set @aa = '1' set @i = @i + 1  --迴圈end


 運行完畢,發現什麼情況:
1--
2--1
3--1
4--1迴圈裡面定義的變數,第一次列印這個變數確實正常,因為沒有賦值所以為空白,但是後面幾次迴圈就怪了變成1了這是什麼情況?系統竟然把上次迴圈的值取過來了!  SQLSERVER 在迴圈裡面定義變數,如果變數在迴圈結束的時候賦值了就會造成下次迴圈的時候把這個值賦給定義的變數,好饒,頭大 最後沒有辦法,先給變數賦值,然後再執行相關操作:
declare @i intset @i = 1while @i<5begin declare @aa varchar(1) set @aa = '' print convert(varchar(1),@i)+'--'+isnull(@aa,'') select @aa='0' where 1>2 if @aa is null set @aa = '1' set @i = @i + 1end

 

然後運行結果如下:

1--
2--
3--
4--

 

唉,這個問題,微軟有點水呀


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.