程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL 2000自定義函數調用GETDATE()時報錯

SQL 2000自定義函數調用GETDATE()時報錯

編輯:關於SqlServer

在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

作者:潇湘隱者

出處:http://www.cnblogs.com/kerrycode/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved