declare @value float
set @value=3.22
select @value
return @value
为什么select出来的值是3.22,而return返回的值却是3
难道return时将它转换为整数了?
那应该怎么才能返回小数呢?
希望知道的人帮忙解答下。

解决方案 »

  1.   

    以下是return的帮助内容从查询或过程中无条件退出。RETURN 的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出。RETURN 之后的语句是不执行的。 Transact-SQL 语法约定语法
     
    RETURN [ integer_expression ] 
     参数
    integer_expression 
    返回的整数值。存储过程可向执行调用的过程或应用程序返回一个整数值。返回类型
    可以选择返回 int。注意: 
    除非另有说明,所有系统存储过程均返回 0 值。此值表示成功,而非零值则表示失败。
     
    备注
    如果用于存储过程,RETURN 不能返回空值。如果某个过程试图返回空值(例如,使用 RETURN @status,而 @status 为 NULL),则将生成警告消息并返回 0 值。在执行了当前过程的批处理或过程中,可以在后续的 Transact-SQL 语句中包含返回状态值,但必须以下列格式输入:EXECUTE @return_status = <procedure_name>。注意: 
    兼容级别设置确定了是将空字符串 (NULL) 解释为单个空格,还是解释为真正的空字符串。如果兼容级别小于或等于 65,则 SQL Server 会将空字符串解释为单个空格。如果兼容级别等于 70,SQL Server 会将空字符串解释为空字符串。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。
     
    示例
    A. 从过程返回
    以下示例显示如果在执行 findjobs 时没有指定用户名作为参数,则 RETURN 将使过程向用户屏幕发送一条消息后退出。如果指定了用户名,则将从相应的系统表中检索此用户在当前数据库创建的所有对象名。 复制代码 
    CREATE PROCEDURE findjobs @nm sysname = NULL
    AS 
    IF @nm IS NULL
        BEGIN
            PRINT 'You must give a user name'
            RETURN
        END
    ELSE
        BEGIN
            SELECT o.name, o.id, o.uid
            FROM sysobjects o INNER JOIN master..syslogins l
                ON o.uid = l.sid
            WHERE l.name = @nm
        END;
     B. 返回状态代码
    以下示例将检查指定联系人的 ID 的状态。如果所在的州是 Washington (WA),将返回状态代码 1。在其他情况下(StateProvince 的值是 WA 以外的值,或者 ContactID 没有匹配的行),返回状态代码 2。 复制代码 
    USE AdventureWorks;
    GO
    CREATE PROCEDURE checkstate @param varchar(11)
    AS
    IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE ContactID = @param) = 'WA'
        RETURN 1
    ELSE
        RETURN 2;
    GO
     以下示例显示执行 checkstate 返回的状态。第一个示例显示的联系人在华盛顿;第二个示例显示的联系人不在华盛顿;第三个示例显示的联系人无效。局部变量 @return_status 必须在使用前声明。 复制代码 
    DECLARE @return_status int;
    EXEC @return_status = checkstate '2';
    SELECT 'Return Status' = @return_status;
    GO
     下面是结果集:  复制代码 
    Return Status 
    ------------- 
    1             
     指定一个不同的联系人编号,再执行一次该查询。 复制代码 
    DECLARE @return_status int;
    EXEC @return_status = checkstate '6';
    SELECT 'Return Status' = @return_status;
    GO
     下面是结果集:  复制代码 
    Return Status 
    ------------- 
    2
     指定另一个联系人编号,再执行一次该查询。 复制代码 
    DECLARE @return_status int
    EXEC @return_status = checkstate '12345678901';
    SELECT 'Return Status' = @return_status;
    GO
     下面是结果集:  复制代码 
    Return Status 
    ------------- 
    2
     
      

  2.   

    要返回其它类型,可以用output参数
      

  3.   

    如果在存储过程要返回其他值,应该用output参数create proc pr_test
    @ret float  output
    as...
      declare @value float 
      set @value=3.22 
      set @ret=@value
    ...
    go
      

  4.   

    declare @num float, @sqls nvarchar(4000) 
    set @sqls='select @a=3.22 ' 
    exec sp_executesql @sqls,N'@a float output',@num output 
    select @num 
    /*----------------------------------------------------- 
    3.2200000000000002(影響 1 個資料列)*/