读书人

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

发布时间: 2014-01-08 14:18:52 作者: rapoo

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

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的。。。

读书人网 >SQL Server

热点推荐