CREATE FUNCTION MyFunc(@money DOUBLE)
RETURNS DOUBLE
AS
BEGIN
RETURN SELECT COUNT(*) FROM Cost WHERE costs<@money

END报错
消息 102,级别 15,状态 1,过程 MyFunc,第 1 行
')' 附近有语法错误。
消息 137,级别 15,状态 2,过程 MyFunc,第 5 行
必须声明标量变量 "@money"。

解决方案 »

  1.   

    CREATE FUNCTION MyFunc(@money decimal)
    RETURNS decimal
    AS
    BEGINdeclare @t int
    set @t=(SELECT COUNT(*) FROM Cost WHERE costs<@money)
    RETURN @tEND
      

  2.   

    CREATE FUNCTION MyFunc(@money float)
    RETURNS   int
    AS
    BEGIN
    RETURN (SELECT COUNT(*) FROM Cost WHERE costs<@money)END
      

  3.   

    CREATE FUNCTION MyFunc(@money double)
     RETURNS  double
     AS
     BEGIN
     RETURN (SELECT COUNT(*) FROM Cost WHERE costs<@money)
     END 
      

  4.   


    create function myfunc ( @money float )
    returns int
    as 
    begin
        return (select count(*) from cost where costs<@money)
    end
      

  5.   

    CREATE FUNCTION MyFunc(@money DOUBLE)
    RETURNS int
    AS
    BEGIN
    DECLARE @it INT
    SET @it= (SELECT COUNT(*) FROM Cost WHERE costs<@money)
    RETURN @it;
    END;错误:消息 102,级别 15,状态 1,过程 MyFunc,第 1 行
    ')' 附近有语法错误。
    消息 137,级别 15,状态 2,过程 MyFunc,第 6 行
    必须声明标量变量 "@money"。
    消息 178,级别 15,状态 1,过程 MyFunc,第 7 行
    在此上下文中不能使用带有返回值的 RETURN 语句。
      

  6.   

    难道是数据类型的原因?double不行要用float?
      

  7.   


    数据库的字段: 
    类型:float 代表从 - 1.79E + 308 到 1.79E + 308 之间的浮点数字数据。(占用8字节) 
    类型:real 代表从 -3.40E + 38 到 3.40E + 38 之间的浮点数字数据。(占用4字节)而C#中: 
    double 表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字(8字节)
    float 表示一个值介于 -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字(4字节)就是说数据库中没有double型,float就表示double值。 
    sql server数据库字段类型与.net的数据类型的对应关系:real(数据库)<--> float(.NET) 
    float(数据库)<--> double(.NET)读取数据库中的float类型的字段要使用GetDouble方法 
    读取数据库中的real类型的字段时才应该使用GetFloat方法
      

  8.   

    SQL SERVER 2012中的所有数据类型:详见:http://msdn.microsoft.com/zh-cn/library/ms187752.aspx有numeric,decimal等精确数字有float,real等近似数字