在sql的自定义函数中,怎样使用getdate()?

northdevil 2004-11-21 04:23:27
create FUNCTION [dbo].[setSP] ()
RETURNS datetime AS
begin
Declare @date datetime
.....

set @date= getdate()
.....
return @date
end

出现如下错误
在函数内不正确地使用了 'getdate'。
怎么解决?
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2004-11-22
  • 打赏
  • 举报
回复
应为function内部不允许使用
函数可以是确定的或不确定的。如果任何时候用一组特定的输入值调用函数时返回的结果总是相同的,则这些函数为确定的。如果每次调用函数时即使用的是相同的一组特定输入值,返回的结果总是不同的,则这些函数为不确定的。

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

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

@@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

lihonggen0 2004-11-22
  • 打赏
  • 举报
回复
I did briefly discuss of using non-determinitic functions in UDF is not possible. But there have been tons of questions in newsgroups asking why they cannot use getdate() in their UDF. Understand that getdate() is a built-in UDF which is non-determinitic in nature. But there are workarounds for the same. See the example below :

CREATE VIEW CurrentDate AS SELECT Date = GETDATE()
GO
CREATE FUNCTION myFunction () RETURNS DATETIME AS
BEGIN
DECLARE @myDateTime DATETIME
SELECT @myDateTime = Date FROM CurrentDate
RETURN (@myDateTime)
END
GO
SELECT dbo.myFunction()
GO
CSharpProgrammer 2004-11-22
  • 打赏
  • 举报
回复
DECLARE NVARCHAR(20) @Date

SET @Date = CONVERT(NVARCHAR(20),GetDate(),120)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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