文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SQL 2000自定义函数调用GETDATE()报错

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

时间:2011-03-23  来源:潇湘隐者

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

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

 

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

SET NOCOUNT ON;

DECLARE @SampleNo AS VARCHAR(30);
DECLARE @Date AS VARCHAR(8);
DECLARE @SerialNumber AS VARCHAR(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 :
--
----------------------------------------------------------------------------------------------
CREATE FUNCTION [dbo].[FUN_GenerateRaminiSampleNo](@Type VARCHAR(10), @DateTime DATETIME)
RETURNS VARCHAR(30)
AS
BEGIN

DECLARE @SampleNo VARCHAR(30);
DECLARE @Date VARCHAR(8);
DECLARE @SerialNumber VARCHAR(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

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载