zoukankan      html  css  js  c++  java
  • 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
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1993149.html
Copyright © 2011-2022 走看看