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
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    Mac 应用程序中的App在Launchpad中不显示
    oh-my-zsh的安装
    用Lambda 表达式实现Runnable
    用Lambda 表达式实现Runnable
    记录Nacos配置Mysql数据库连接失败解决
    Mac最好用的终端iTerm2安装及配置
    MySQL安装设置密码策略问题
    构建微服务模块流程
    dependencies与dependencyManagement的区别
    winSocket 2 简单的可持续的socket
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1993149.html
Copyright © 2011-2022 走看看