首页 新闻 赞助 找找看

请教一个SQL的问题。

0
[已解决问题] 解决于 2016-02-29 17:27

DECLARE @RECORDS INT
DECLARE @hight numeric(18,2)
DECLARE @SUM numeric(18,2)
DECLARE @SumHight numeric(18,2)
SET @RECORDS=10
SET @SumHight=100.00

SET @SUM=0;

while(@RECORDS>0)
Begin
SET @SUM =@SUM+@SumHight;
SET @SumHight=@SumHight/2;
set @RECORDS=@RECORDS-1;
end
PRINT '10次后经过的总高度是'+convert(varchar(20),@SUM)+',10次反弹的高度是'+convert(varchar(20),@SumHight)

这里直接运行是正常的。消息里也有结果,

 

但是如果注释掉 SET @SUM=0;  运行时正常, 但无任何反应或消息,  这里是为什么,

SQL
奇妙能力的主页 奇妙能力 | 菜鸟二级 | 园豆:253
提问于:2016-02-29 09:19
< >
分享
最佳答案
0

你好,试试下把@Sum打印出来,赋值前后都得打印。

print(cast(@SUM as varchar(100)))
 SET @SUM=0;
print(cast(@SUM as varchar(100)))

根据打印结果,你会发现赋值前是空字符串,赋值后是0,空字符串累加还是空字符串。

 

 

奖励园豆:5
chengeng | 菜鸟二级 |园豆:294 | 2016-02-29 10:11

原来是这样,  是不是所有声明的变量  在使用前都需要初始化?

奇妙能力 | 园豆:253 (菜鸟二级) | 2016-02-29 10:13

@奇妙能力: 对,养成习惯,变量声明后初始化(使用前)

chengeng | 园豆:294 (菜鸟二级) | 2016-02-29 10:15

@chengeng: 还有一个问题, 就是空字符串,  是NULL 吗? 还是 @string varchar(10), SET @string= ’‘;

谢谢你,  明白了,

奇妙能力 | 园豆:253 (菜鸟二级) | 2016-02-29 10:18

@奇妙能力: 是Null,你可以查看一下变量的类型

DECLARE @Sum int
--SET @Sum = 0
SELECT @Sum, CAST(SQL_VARIANT_PROPERTY(@Sum, 'BaseType') AS VARCHAR(50))

chengeng | 园豆:294 (菜鸟二级) | 2016-02-29 10:25

@chengeng:居然还学到了一个内置函数sql_variant_property 真心帮助很大, 谢谢你啦,

奇妙能力 | 园豆:253 (菜鸟二级) | 2016-02-29 10:50
其他回答(1)
0

需要初始化参数,初始为NULL

石头很忙 | 园豆:208 (菜鸟二级) | 2016-02-29 13:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册