首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于变量赋值有关问题:要查找的字段为numeric类型,如果有null则先用isnull函数将其赋值为'0'然后再将其赋值给变量,但是就出错

2012-12-22 
关于变量赋值问题:要查找的字段为numeric类型,如果有null则先用isnull函数将其赋值为ɰ'然后再

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

热点排行
Bad Request.