读书人

关于变量赋值有关问题:要查找的字段为

发布时间: 2012-12-22 12:05:07 作者: rapoo

关于变量赋值问题:要查找的字段为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

[其他解释]
引用:
在R表中有如下字段:Amt(numeri类型)、Reb(numeric类型)、id(nvarchar类型)、name(nvarchar类型)从R表中查找符合条件的Amt和Reb如果有字段为NULL则用isnull转换为0,然后再赋值给变量@Amt和@Reb,代码如下:
SQL code?123456Declare @AmtDeclare @Rebselect @Amt ……


申明变量:
Declare @Amt 变量类型
Declare @Reb 变量类型

你少了类型
[其他解释]
[quote=引用:]
申明变量:
Declare @Amt 变量类型
Declare @Reb 变量类型

你少了类型
[quote]

版主,这不是错误所在,额,也是一个错误,但我加上类型仍然出错,有错误提示:
消息 141,级别 15,状态 1,第 3 行
向变量赋值的 SELECT 语句不能与数据检索操作结合使用。

这是加上类型后,仍然有错误!
[其他解释]
引用:
[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

[其他解释]
引用:
引用:[quote=引用:]
申明变量:
Declare @Amt 变量类型
Declare @Reb 变量类型

你少了类型
[quote]

版主,这不是错误所在,额,也是一个错误,但我加上类型仍然出错,有错误提示:
消息 141,级别 15,状态 1,第 3 行
向……


你还得加上类型

------其他解决方案--------------------


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

[其他解释]
引用:
SQL code?123456789DECLARE @Amt NUMERICDECLARE @Reb NUMERICSELECT @Amt = ISNULL(Amt, 0) , @Reb = isnull(Reb, 0) FROM R WHERE id = '1010101' AND name = 'GT'PRINT @Amt ……

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为未定义的对象,怎么解决呢?





[其他解释]
引用:
引用:
SQL code?123456789DECLARE @Amt NUMERICDECLARE @Reb NUMERICSELECT @Amt = ISNULL(Amt, 0) , @Reb = isnull(Reb, 0) FROM R WHERE id = '1010101' AND name = 'GT'……
先把变量都赋值,然后单独执行select @Amt1+@Amt2+@Amt3+@Amt4 ,这里不用from
[其他解释]
引用:
引用:引用:
SQL code?123456789DECLARE @Amt NUMERICDECLARE @Reb NUMERICSELECT @Amt = ISNULL(Amt, 0) , @Reb = isnull(Reb, 0) FROM R WHERE i……


这样子:
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 语句不能与数据检索操作结合使用。
[其他解释]

引用:
SQL code?1234567891011121314151617181920212223SELECT @Amt1 = ISNULL(Amt, 0) , @Reb1 = ISNULL(Reb, 0)FROM RWHERE id = '10001' SELECT @Amt2 = ISNULL(Amt, 0) , @Reb2 ……

Thanks a lot!!!!

读书人网 >SQL Server

热点推荐