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; 运行时正常, 但无任何反应或消息, 这里是为什么,
你好,试试下把@Sum打印出来,赋值前后都得打印。
print(cast(@SUM as varchar(100)))
SET @SUM=0;
print(cast(@SUM as varchar(100)))
根据打印结果,你会发现赋值前是空字符串,赋值后是0,空字符串累加还是空字符串。
原来是这样, 是不是所有声明的变量 在使用前都需要初始化?
@奇妙能力: 对,养成习惯,变量声明后初始化(使用前)
@chengeng: 还有一个问题, 就是空字符串, 是NULL 吗? 还是 @string varchar(10), SET @string= ’‘;
谢谢你, 明白了,
@奇妙能力: 是Null,你可以查看一下变量的类型
DECLARE @Sum int
--SET @Sum = 0
SELECT @Sum, CAST(SQL_VARIANT_PROPERTY(@Sum, 'BaseType') AS VARCHAR(50))
@chengeng:居然还学到了一个内置函数sql_variant_property 真心帮助很大, 谢谢你啦,
需要初始化参数,初始为NULL