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--

 

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


相關文章

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.