首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 自訂函數無法直接呼叫 GETDATE() 的兩種解法

     編輯:關於SqlServer

錯誤現象

函數中寫 `GETDATE()` 編譯報錯:「Invalid use of 'getdate' within a function」;改 `dbo.GETDATE()` 編譯通過但執行報「無效物件名稱」。

根因

SQL 2000 禁止在函數中使用非確定性函數(`GETDATE()` 為非確定性)。

解法一:以參數傳入

CREATE FUNCTION dbo.FUN_GenerateRaminiSampleNo(@Type VARCHAR(10), @DateTime DATETIME)
RETURNS VARCHAR(30)
AS BEGIN
    DECLARE @Date VARCHAR(8);
    SELECT @Date = CONVERT(VARCHAR(8), @DateTime, 112); -- 使用參數
    -- 業務邏輯
    RETURN @SampleNo;
END;

呼叫時 `SELECT dbo.FUN_GenerateRaminiSampleNo('A', GETDATE())`。

解法二:建立包裝檢視表

CREATE VIEW v_CurrentDateTime AS SELECT GETDATE() AS NowTime;

函數中 `SELECT @Date = CONVERT(VARCHAR(8), NowTime, 112) FROM v_CurrentDateTime`。

版本差異

SQL 2005+ 已支援函數內直接呼叫 `GETDATE()`,無此限制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved