日期:2014-05-17  浏览次数:20366 次

存储过程 int型变量问题
 DECLARE @shuliang int
  SET @shuliang = 0
  SELECT @shuliang =  SUM(CONVERT (INT, [yingtuishu]))
  FROM   [Faliaominxi]
  WHERE  [liaohao] = @liaohao
         AND [mark] = '0'
         AND [faliaodan] <> @faliaodan


这样的一个存储过程片断,当查询不到符合条件的数据时 将 @shuliang 赋值 0,我用
IF(@shuliang=NULL)
Begin
set @shuliang=0
End
 或者是
IF(@shuliang='')
Begin
set @shuliang=0
End
 都不成功,我更改数据类型后使用
IF(convert(nvarchar(50), @shuliang)=NULL)
Begin
set @shuliang=0
End
 或者是
IF(convert(nvarchar(50), @shuliang)='')
Begin
set @shuliang=0
End
也不行 请高手指点下,当INT型的数据类型,没有获取到任何数据的时候,需要怎么来给变量赋值?
谢谢
------最佳解决方案--------------------
isnull(@shuliang,0)

------其他解决方案--------------------
 
DECLARE @shuliang int
  SET @shuliang = 0
  SELECT @shuliang =  isnull(SUM(CONVERT (INT, [yingtuishu])),0)--这样转化过后是不会出现''的情况
  FROM   [Faliaominxi]
  WHERE  [liaohao] = @liaohao
         AND [mark] = '0'
         AND [faliaodan] <> @faliaodan


------其他解决方案--------------------
ISNULL()
------其他解决方案--------------------
如果真是“没有”那就是null,int是要么有,要么没有,不会存在空字符串
------其他解决方案--------------------
isnull(@shuliang,0)  直接这样写吗 不对啊
消息 102,级别 15,状态 1,过程 wl_jiecun,第 37 行
'isnull' 附近有语法错误。
------其他解决方案--------------------
已经搞定 ,谢谢!
------其他解决方案--------------------
直接写肯定不对拉,另外,昨晚就想问你的。[yingtuishu]这个是什么类型?
------其他解决方案--------------------
DECLARE @shuliang int
  SET @shuliang = 0
  SELECT @shuliang =  SUM(cast( ISNULL([yingtuishu],0) as INT))
  FROM   [Faliaominxi]
  WHERE  [liaohao] = @liaohao
         AND [mark] = '0'
         AND [faliaodan] <> @faliaodan

------其他解决方案--------------------
@shuliang=NULL --@shuliang  is NULL

------其他解决方案--------------------
引用:
直接写肯定不对拉,另外,昨晚就想问你的。[yingtuishu]这个是什么类型?

本来是写成int 的 但是怕出错,直接转成INT 也怕存在影响,SQL里有没有双精度型这样的数据类型啊
------其他解决方案--------------------
decimal应该算双精度。那你那个convert就可以不要了。转换需要耗时的。
------其他解决方案--------------------