Sqlserver中使用Select語句給變數賦值的時候需要注意的一個問題

來源:互聯網
上載者:User

標籤:

我們知道在SqlServer中可以用Select語句給變數賦值,比如如下語句就為int類型的變數@id賦值

 1 declare @id int=-1; 2  3 select @id=id from  4 ( 5 select 1 as id 6 union all  7 select 2 as id 8 union all  9 select 3 as id10 ) as t11 12 select @id

執行上面的代碼會顯示下面的查詢結果,結果顯示最後@id的值為3,那麼意味著上面第3行的select語句每返回一行資料記錄,sqlserver就用id列為@id進行了一次賦值,而最後一行資料記錄id列為3,所以在第12行的查詢中最後查得@id為3

那麼如果上面第3行的查詢語句一行結果都沒有返回,那麼最終在12行的查詢中@id會是什麼值呢?很多人可能會想到@id會為null。

接下來我們將上面的代碼稍作更改如下,我們在第3行的查詢中加入了where條件1<>1,這個條件是永遠都不會被滿足的始終為false,所以現在第3行的select語句一條記錄都不會返回

 1 declare @id int=-1; 2  3 select @id=id from  4 ( 5 select 1 as id 6 union all  7 select 2 as id 8 union all  9 select 3 as id10 ) as t11 where 1<>112 13 select @id

我們查看一下現在代碼的執行結果,我們發現結果並不為null而是-1,相當於第3行的select語句根被就沒有為@id賦值,原因也很簡單,因為前面我們說了第3行的select語句返回多少條記錄,就會為@id賦多少次值,現在它一行記錄都沒有返回,那麼就不會為@id賦值,所以最終@id還是為初始值-1

 

現在我們再將代碼改為如下所示,將查詢結果sum後的彙總值賦值給變數@id

 1 declare @id int=-1; 2  3 select @id=sum(id) from  4 ( 5 select 1 as id 6 union all  7 select 2 as id 8 union all  9 select 3 as id10 ) as t11 where 1<>112 13 select @id

這一次的結果顯示@id為null了,原因也很簡單因為第3行的查詢最後只返回了一行為null記錄,所以對@id進行了一次賦值,所以最後在13行的查詢中@id顯示為null

 

所以在使用Select語句為sql變數賦值的時候,一定要清楚變數的值是取決於select語句的查詢結果,如果select語句最後一行資料都沒返回,那麼select語句就不會為變數賦值。如果select語句最後返回了多行記錄,那麼變數就為最後一行記錄的值。

 

Sqlserver中使用Select語句給變數賦值的時候需要注意的一個問題

聯繫我們

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