关于变量赋值问题:要查找的字段为numeric类型,如果有null则先用isnull函数将其赋值为'0'然后再将其赋值给变量,但是就出错了,求指导
在R表中有如下字段:Amt(numeri类型)、Reb(numeric类型)、id(nvarchar类型)、name(nvarchar类型)从R表中查找符合条件的Amt和Reb如果有字段为NULL则用isnull转换为0,然后再赋值给变量@Amt和@Reb,代码如下:
Declare @Amt
Declare @Reb
select @Amt = Amt,isnull(Amt,0) as Amt,@Reb = Reb,isnul(Reb,0) as Reb from R where id = '1010101' and name = 'GT'
print @Amt
print @Reb
然后就出错了,请问怎么改正?
[最优解释]
SELECT @Amt1 = ISNULL(Amt, 0) ,
@Reb1 = ISNULL(Reb, 0)
FROM R
WHERE id = '10001'
SELECT @Amt2 = ISNULL(Amt, 0) ,
@Reb2 = ISNULL(Reb, 0)
FROM R
WHERE id = '10002'
SELECT @Amt3 = ISNULL(Amt, 0) ,
@Reb3 = ISNULL(Reb, 0)
FROM R
WHERE id = '10003'
SELECT @Amt4 = ISNULL(Amt, 0) ,
@Reb4 = ISNULL(Reb, 0)
FROM R
WHERE id = '10004'
SELECT @Amt1 + @Amt2 + @Amt3 + @Amt4
[其他解释]
申明变量:
Declare @Amt 变量类型
Declare @Reb 变量类型
你少了类型
[其他解释]
[quote=引用:]
申明变量:
Declare @Amt 变量类型
Declare @Reb 变量类型
你少了类型
[quote]
版主,这不是错误所在,额,也是一个错误,但我加上类型仍然出错,有错误提示:
消息 141,级别 15,状态 1,第 3 行
向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
这是加上类型后,仍然有错误!
[其他解释]
Declare @Amt
Declare @Reb
select @Amt = isnull(Amt,0)t,@Reb =isnul(Reb,0) from R where id = '1010101' and name = 'GT'
print @Amt
print @Reb
[其他解释]
你还得加上类型
------其他解决方案--------------------
DECLARE @Amt NUMERIC
DECLARE @Reb NUMERIC
SELECT @Amt = ISNULL(Amt, 0) ,
@Reb = isnul(Reb, 0)
FROM R
WHERE id = '1010101'
AND name = 'GT'
PRINT @Amt
PRINT @Reb
[其他解释]
DECLARE @Amt NUMERIC
DECLARE @Reb NUMERIC
SELECT @Amt = ISNULL(Amt, 0) ,
@Reb = isnull(Reb, 0)
FROM R
WHERE id = '1010101'
AND name = 'GT'
PRINT @Amt
PRINT @Reb
[其他解释]
OK了,感谢,最后无耻的追问一个问题哈,节约积分,我快没积分了,所以出此下策了,望海涵!
追加问题:
Declare @Amt1
Declare @Reb1
select @Amt1 = isnull(Amt,0),@Reb1 = isnull(Reb,0) from R where id = '10001'
Declare @Amt2
Declare @Reb2
select @Amt2 = isnull(Amt,0),@Reb2 = isnull(Reb,0) from R where id = '10002'
Declare @Amt3
Declare @Reb3
select @Amt3 = isnull(Amt,0),@Reb3 = isnull(Reb,0) from R where id = '10003'
Declare @Amt4
Declare @Reb4
select @Amt4 = isnull(Amt,0),@Reb4 = isnull(Reb,0) from R where id = '10004'
然后重点了:求@Amt1+@Amt2+@Amt3+@Amt4的值,我是这么做的:
select @Amt1+@Amt2+@Amt3+@Amt4 from R
然后就出错了,提示我@Amt1为未定义的对象,怎么解决呢?
[其他解释]
先把变量都赋值,然后单独执行select @Amt1+@Amt2+@Amt3+@Amt4 ,这里不用from
[其他解释]
这样子:
Declare @Amt1
Declare @Reb1
Declare @Amt2
Declare @Reb2
Declare @Amt3
Declare @Reb3
Declare @Amt4
Declare @Reb4
select @Amt1 = isnull(Amt,0),@Reb1 = isnull(Reb,0) from R where id = '10001'
union all
select @Amt2 = isnull(Amt,0),@Reb2 = isnull(Reb,0) from R where id = '10002'
union all
select @Amt3 = isnull(Amt,0),@Reb3 = isnull(Reb,0) from R where id = '10003'
union all
select @Amt4 = isnull(Amt,0),@Reb4 = isnull(Reb,0) from R where id = '10004'
union all
select @Amt1 + @Amt2 + @Amt3 + @Amt4
有错误:
消息 10734,级别 15,状态 1,第 15 行
在包含顶级 UNION、INTERSECT 或 EXCEPT 运算符的语句中不允许变量赋值。
消息 10734,级别 15,状态 1,第 27 行
在包含顶级 UNION、INTERSECT 或 EXCEPT 运算符的语句中不允许变量赋值。
消息 141,级别 15,状态 1,第 0 行
向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
[其他解释]
Thanks a lot!!!!