create proc test
@s decimal(18,2) output
as
select @s=1.22
return @s
go
declare @a decimal(18,2),
@s decimal(18,2)
exec @a=[test] @s output
select @a
---------------------------------------
1.00(1 行受影响)为啥给取整了。不明白。

解决方案 »

  1.   

    试了下。确实比较奇怪,
    试了几种情况,好象是exec @a=[test] @s output这里给赋值的时候变的。
    不懂是为什么,跟楼主一起等高手解答
      

  2.   

    其实这里有两次隐性类型转换
    第一次是在
    create proc test
    @s decimal(18,2) output
    as
    select @s=1.22
    return @s
    内return中的@s由1.22转成1第二次就是
    declare @a decimal(18,2),
    @s decimal(18,2)
    exec @a=[test] @s output
    select @a  
    内exec 返回的1赋给@a向decimal(18,2)
      

  3.   

    你不是有output么,select @s啊
      

  4.   

    alter proc test
    as
    declare @s decimal(18,2)
    set @s=1.22
    select @s
    goexec [test]
    declare @a decimal(18,2),
    @s decimal(18,2)
    exec @a=[test]
    select @a
    ---------------------------------------
    1.22(1 行受影响)
    ---------------------------------------
    1.22(1 行受影响)
    ---------------------------------------
    0.00(1 行受影响)这样还是不对的。
      

  5.   

    alter proc test
    @s decimal(18,2) output
    as
    select @s=1.22
    return @s
    go
    declare @a decimal(18,2),
    @s decimal(18,2)
    exec [test] @s output
    select @s