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

写了个简单函数,报一大串异常,求解

2014-01-08 
写了个简单函数,报一大串错误,求解CREATE FUNCTION w_getPushMonet(@userId VARCHAR(40),@yeji MONEY) RET

写了个简单函数,报一大串错误,求解

CREATE FUNCTION w_getPushMonet(@userId VARCHAR(40),@yeji MONEY) RETURNS MONEY
AS 
BEGIN
DECLARE @job VARCHAR
DECLARE @unit VARCHAR
DECLARE @rate DOUBLE
DECLARE @minMoney DOUBLE
DECLARE @maxMoney DOUBLE
SELECT @job=JobTitle,@unit=BusinessUnitId FROM [User] WHERE UserId=@userId
DECLARE temp_ CURSOR FOR 
SELECT c__yjed,c__yjedmax,c__tcxs FROM e__tcgz WHERE c__bm=@unit AND c__gw=@job;
OPEN temp_
FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
WHILE(@@FETCH_STATUS=0)
BEGIN 
 IF @maxMoney='' OR @maxMoney IS NULL 
 BEGIN 
IF @yeji>=@minMoney
BEGIN 
 RETURN @rate
 END
END
ELSE IF @minMoney<=@yeji AND @maxMoney>@yeji
BEGIN 
RETURN @rate
END
END
FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
CLOSE temp_
DEALLOCATE temp_
END 

报错信息:
7关键字 'DECLARE' 附近有语法错误。 Severity 15
8关键字 'DECLARE' 附近有语法错误。 Severity 15
9关键字 'SELECT' 附近有语法错误。 Severity 15
13必须声明标量变量 "@minMoney"。 Severity 15 State 2
16必须声明标量变量 "@maxMoney"。 Severity 15 State 2
18必须声明标量变量 "@minMoney"。 Severity 15 State 2
20必须声明标量变量 "@rate"。 Severity 15 State 2
23必须声明标量变量 "@minMoney"。 Severity 15 State 2
25必须声明标量变量 "@rate"。 Severity 15 State 2
28必须声明标量变量 "@minMoney"。 Severity 15 State 2
[解决办法]
t-sql没有double类型啊
[解决办法]
CREATE FUNCTION w_getPushMonet(@userId VARCHAR(40),@yeji MONEY) 
RETURNS MONEY
AS 
BEGIN
DECLARE @job VARCHAR(10)
DECLARE @unit VARCHAR(10)
DECLARE @rate BIGINT
DECLARE @minMoney BIGINT
DECLARE @maxMoney BIGINT
SELECT @job=JobTitle,@unit=BusinessUnitId FROM [User] WHERE UserId=@userId
DECLARE temp_ CURSOR FOR 
    SELECT c__yjed,c__yjedmax,c__tcxs FROM e__tcgz WHERE c__bm=@unit AND c__gw=@job;
    OPEN temp_
    FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
    WHILE(@@FETCH_STATUS=0)
    BEGIN 
         IF @maxMoney='' OR @maxMoney IS NULL 
             BEGIN 
                IF @yeji>=@minMoney
                    BEGIN 
                         RETURN @rate
                     END
            END
        ELSE IF @minMoney<=@yeji AND @maxMoney>@yeji
            BEGIN 
                RETURN @rate
            END
    END
    FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
    CLOSE temp_
    DEALLOCATE temp_
END 
            
[解决办法]
sql server没有double类型
[解决办法]
改成这样,用float类型:

CREATE FUNCTION w_getPushMonet(@userId VARCHAR(40),@yeji MONEY) RETURNS MONEY
AS 
BEGIN
DECLARE @job VARCHAR(20)
DECLARE @unit VARCHAR(20)
DECLARE @rate float
DECLARE @minMoney float


DECLARE @maxMoney float
SELECT @job=JobTitle,@unit=BusinessUnitId FROM [User] WHERE UserId=@userId

DECLARE temp_ CURSOR FOR 
SELECT c__yjed,c__yjedmax,c__tcxs FROM e__tcgz WHERE c__bm=@unit AND c__gw=@job;
OPEN temp_
FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
WHILE(@@FETCH_STATUS=0)
BEGIN 
 IF @maxMoney='' OR @maxMoney IS NULL 
 BEGIN 
IF @yeji>=@minMoney
BEGIN 
 RETURN @rate
 END
END
ELSE IF @minMoney<=@yeji AND @maxMoney>@yeji
BEGIN 
RETURN @rate
END
END
FETCH NEXT FROM temp_ INTO @minMoney,@maxMoney,@rate
CLOSE temp_
DEALLOCATE temp_
END 


[解决办法]
你没算sqlserver吧?sqlserver从来都没出现过double
[解决办法]
我用SqlDBX自动提示出来的double...


那个可能是oracle的。。。

热点排行