SQL 2000自定义函数调用GETDATE()报错-阿里云开发者社区

开发者社区> 潇湘隐者> 正文

SQL 2000自定义函数调用GETDATE()报错

简介:
+关注继续查看

在SQL 2000数据库里的自定义函数中调用GETDATE()时,结果编译时报错,提示错误如下:Invalid use of 'getdate' within a function

我给个测试例子如下所示,

 

--================================================================================================
--    Author            :    Kerry
--    CreateDate        :    2011-03-23
--    Description       :    根据规则自动生成流水号
--------------------------------------------------------------------------------------------------
--    UpdateDate        :
--------------------------------------------------------------------------------------------------
CREATEPROCEDURE USP_RiminSampleNoGenerate
    @TypeVARCHAR(10)
AS

SET NOCOUNT ON;

DECLARE@SampleNoASVARCHAR(30);
DECLARE@DateASVARCHAR(8);
DECLARE@SerialNumberASVARCHAR(3)


BEGIN    

      SELECT@Date=CONVERT(VARCHAR(18),GETDATE(), 112);
    --业务规则处理

END 
GO

如果你把GETDATE() 改成dbo.GETDATE()则编译不会出错,但是调用该函数时会报错,错误提示如下所示:对象名   'dbo.GETDATE '

无效。

这是因为不允许在用户定义函数主体中内置不确定函数(确定性函数和不确定性函数大家可以参考MSDN文档介绍)。在SQL 2000里面有

两种解决方案:把GETDATE()函数作为自定义函数的参数传入(如下所示)或定义获得当前时间的视图来解决这个问题。GETDATE()是不确

定函数。不过似乎在SQL 2005里面,自定义函数可以调用函数GETDATE(),如下所示,而且编译、调用时都不会出错。

 

--==============================================================================================
--    Author            :    Kerry
--    CreateDate        :    2011-03-23
--    Description       :    根据规则自动生成流水号
------------------------------------------------------------------------------------------------
--    UpdateDate        :
------------------------------------------------------------------------------------------------
CREATEFUNCTION[dbo].[FUN_GenerateRaminiSampleNo](@TypeVARCHAR(10), @DateTimeDATETIME)
RETURNSVARCHAR(30)
AS
BEGIN
    
    DECLARE@SampleNoVARCHAR(30);
    DECLARE@DateVARCHAR(8);
    DECLARE@SerialNumberVARCHAR(3);

    SELECT@Date=CONVERT(VARCHAR(8),GETDATE(), 112);         --编译出错
--SELECT @Date = CONVERT(VARCHAR(8),dbo.GETDATE(), 112);     --调用出错
--SELECT @Date = CONVERT(VARCHAR(8), @DateTime, 112);
    --业务规则  
END
GO

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Flutter 56: 图解自定义 BubbleWidget 气泡插件
0 基础学习 Flutter,第五十六步:尝试一下自定义气泡插件!
2665 0
C#跨窗体相互调用对方函数
对象对象程序设计,为跨窗体调用提供了良药:即构造函数。只要将某一个窗体对象以参数形式传入到另一个窗体对象的构造函数,即可实现。 一、实际案例需求 图1 Form1窗体设计   图2 Form2窗体设计   如图1、图2,现在要求图1按下按键,自己锁住,弹出图2;然后图2按下按键,自己关闭,解放图1的按键。
905 0
SQL Server DATEADD() 函数
本文转载自:点击打开链接 SQL Server DATEADD() 函数 DATEADD(datepart,number,date)date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。datepart 参数可以是下列的值: 具体实例:
805 0
oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
oracle                                       -->                             mysql to_char(sysdate,'yyyy-mm-dd')-->date_format(sysdate(),'%Y-%m-%d');t...
1616 0
C#调用C函数(DLL)传递参数问题
备忘: 1.C函数参数为字符串char*。如果是入参,对应C#中string或StringBuilder;如果是出参对应C#中StringBuider;   2.C函数参数为结构体指针,需在C#中对应定义结构体。
915 0
关于my.getAuthUserInfo报错:error4,无权跨域调用 的解决方案
使用my.getAuthUserInfo之前,是需要先使用my.getAuthCode的,两个API可以嵌套使用: my.getAuthCode({ scopes: 'auth_user', success: (res) => { my.
1656 0
+关注
潇湘隐者
网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
777
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载