回 帖 发 新 帖 刷新版面

主题:看看getdate函数怎么使用

/*服务器: 消息 156,级别 15,状态 1,过程 ifee,行 4
在关键字 'declare' 附近有语法错误。
服务器: 消息 443,级别 16,状态 1,过程 ifee,行 5
在函数内不正确地使用了 'getdate'。
*/
/*fn为表v_fee的字段*/
use db_test
go
if exists(select * from sysobjects where name='ifee')
drop function ifee
go
create function ifee()
returns money
as
declare @inthour int, @ret money ,@fname varchar(100)--定义变量出错
select @inthour=datepart(hour,getdate())
set @fname=
case @inthour
when 0 then 'f0'
when 1 then 'f1'
when 2 then 'f2'
when 3 then 'f3'
when 4 then 'f4'
when 5 then 'f5'
when 6 then 'f6'
when 7 then 'f7'
when 8 then 'f8'
when 9 then 'f9'
when 10 then 'f10'
when 11 then 'f11'
when 12 then 'f12'
when 13 then 'f13'
when 14 then 'f14'
when 15 then 'f15'
when 16 then 'f16'
when 17 then 'f17'
when 18 then 'f18'
when 19 then 'f19'
when 20 then 'f20'
when 21 then 'f21'
when 22 then 'f22'
when 23 then 'f23'
end
select @ret=@fname from v_fee
return @ret

回复列表 (共5个回复)

沙发

1.
少了begin
2.
select @inthour=datepart(hour,getdate())
应为
set @inthour=datepart(hour,getdate())

板凳


楼上没通过测试,误人子弟

3 楼

1 楼解决了此贴的第一个错误,"--定义变量出错"。
第二个错误是,在函数内不正确地使用了 'getdate'。因为 getdate 不能用在用户自定义的函数中。请看以下说明:

Function Determinism and Side Effects

Functions are either deterministic or nondeterministic. They are deterministic when they always return the same result any time they are called with a specific set of input values. They are nondeterministic when they could return different result values each time they are called with the same specific set of input values.

Nondeterministic functions can cause side effects. Side effects are changes to some global state of the database, such as an update to a database table, or to some external resource, such as a file or the network (for example, modify a file or send an e-mail message).

Built-in nondeterministic functions are not allowed in the body of user-defined functions; they are as follows:

@@CONNECTIONS
@@TOTAL_ERRORS
@@CPU_BUSY
@@TOTAL_READ
@@IDLE
@@TOTAL_WRITE
@@IO_BUSY
GETDATE
@@MAX_CONNECTIONS
GETUTCDATE
@@PACK_RECEIVED
NEWID
@@PACK_SENT
RAND
@@PACKET_ERRORS
TEXTPTR
@@TIMETICKS

4 楼

Leo64823900
是正确的

5 楼

哦,已经改为存储过程,改写好了

我来回复

您尚未登录,请登录后再回复。点此登录或注册