MSSQL(Sql Server)SELECT的迷惑性,使用SELECT赋值时要注意的一个问题

例:

DECLARE @id INT
SELECT @id=id FROM tab WHERE id=1
       
IF(@id IS NULL)
    PRINT('NULL')
ELSE
    PRINT('NOT NULL')

如果表中不存在id=1的数据,会打印出NULL,这并不是因为表中不存在那条数据的缘故,而是DECLARE一个变量,没给此变量赋值的话,默认是NULL,SELECT并没有给@id赋值。


所以:

DECLARE @id INT
SET @id=-1
       
SELECT @id=id FROM tab WHERE id=1
       
IF(@id IS NULL)
    PRINT('NULL')
ELSE
    PRINT('NOT NULL')


如果表中不存在id=1的数据,此时@id的值为-1,打印出NOT NULL,


使用SELECT为变量赋值,当没有返回值时,得到的是变量的上一个值。危险性在于SELECT赋值的迷惑性,不知道原理或者不注意时容易出问题。


如有以下代码,使用多个SELECT赋值时更具迷惑性。

DECLARE @id INT
SELECT @id=id FROM tab WHERE id=1
--其它代码...
       
SELECT @id=id FROM tab WHERE id=2
--其它代码...
   
SELECT @id=id FROM tab WHERE id=3
--其它代码...  
  
--这时用@id做判断,就容易出问题,当表中有都有值时还好,得到的是最后一个值,当有的有值,有的没值时,得到的就不知道哪个值了。

所以为了防止意外出现,SELECT赋值用完之后一定要给那些变量再设一个默认值。


类别:数据库   阅读(0)   评论(0)    发表时间:2017-04-15 12:17  星期六

评论区

发表评论

        姓名:
邮箱|网站:
        内容:

  (可按Ctrl+Enter提交)