为什么不能用GetDate()函数

casho 2003-12-26 03:58:09
CREATE FUNCTION house_isOvered (@house_id int)
RETURNS bit
BEGIN
Declare @over_time datetime
Select top 1 @over_time = (dateadd(year,[house_period],[house_datetime])) from property_house where house_id=@house_id
if @over_time >GetDate()
return 1
return 0
END
...全文
199 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmlxf 2003-12-26
  • 打赏
  • 举报
回复
函数的确定性和副作用
函数可以是确定的或不确定的。如果任何时候用一组特定的输入值调用函数时返回的结果总是相同的,则这些函数为确定的。如果每次调用函数时即使用的是相同的一组特定输入值,返回的结果总是不同的,则这些函数为不确定的。

不确定的函数会产生副作用。副作用是更改数据库的某些全局状态,比如更新数据库表或某些外部资源,如文件或网络等(例如,修改文件或发送电子邮件消息)。

不允许在用户定义函数主体中内置不确定函数;这些不确定函数如下:

@@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
casho 2003-12-26
  • 打赏
  • 举报
回复
哦,还是有一点不太明白,为什么说是系统没有提供呀,
gmlxf 2003-12-26
  • 打赏
  • 举报
回复
系统没有提供这样的函数,最简单的应该就是view了吧,其他的方法我也想知道。
有朋友知道吗,谢谢!!
casho 2003-12-26
  • 打赏
  • 举报
回复
这样可以,可是这样的话就多了一个view呀,能不能在不增加view的情况下解决,谢谢!
gmlxf 2003-12-26
  • 打赏
  • 举报
回复
以上是先创建一个取当前时间的视图。
然后用
(select tdate from v_getdate)
代替
getdate()
即可。
casho 2003-12-26
  • 打赏
  • 举报
回复
哦,都不可以用什么样的函数呢?可以举一些例子吗?谢谢!
gmlxf 2003-12-26
  • 打赏
  • 举报
回复
-- try:

create view v_getdate
as
select getdate() tdate
go

CREATE FUNCTION house_isOvered (@house_id int)
RETURNS bit
BEGIN
Declare @over_time datetime
Select top 1 @over_time = (dateadd(year,[house_period],[house_datetime])) from property_house where house_id=@house_id
if @over_time > (select tdate from v_getdate)
return 1
return 0
END

gmlxf 2003-12-26
  • 打赏
  • 举报
回复
在函数内不能使用getdate

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧