try   select @ret as declare @ret int
   exec @ret=tttt 50
   select @ret as '返回值''

解决方案 »

  1.   

    我把exec @ret=tttt+50改为exec @ret=tttt-50为什么又可以?
      

  2.   

    1. 首先,要在declare @ret int 前加一行, go 区分这个两个sql.2. 在存储过程中你定义了一个输入参数, 就是是你什么exec @ret=tttt+50改为exec @ret=tttt-50对的原因了, 他把-50 当作一个参数输入的存储过程中了. +则分不清时正号还是加号(连接),所以就会出错。而-的意义只有一个。可以这样:
    go
       declare @ret int
       exec @ret=tttt 1
       select '返回值'=@ret + 50
      

  3.   

    在sql server:
    +50只有一种意义,就是前面的表达式加上50
    -50有两种意义,一是前面的表达式减去50,一是表示负50,就是一个数
    exec @ret=tttt-50理解为后者所以能执行,而exec @ret=tttt+50没有其他理解所以出错。
      

  4.   

    sorry,  I was wrong, Yang_(扬帆破浪) is correct, thanks for the correction
      

  5.   

    select '返回值'=@ret改为
    select "返回值"=@ret 或
    select [返回值]=@ret 或
    select @ret as 返回值
    试试。