读书人

存储过程 int型变量有关问题

发布时间: 2012-12-16 12:02:32 作者: rapoo

存储过程 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就可以不要了。转换需要耗时的。
------其他解决方案--------------------


哦 我之前用这个数据类型的时候 一直存在问题 有时候数据写不进 所以一些可能存在小数点的数据,我都是用nvarchar类型 然后在程序里处理。之前没有用存储过程,现在用存储过程了,就要出问题了

读书人网 >SQL Server

热点推荐