2006年8月6日

如何在 SQL Server 自訂函數中使用 GetDate()

若您要在 SQL Server 2005 的自訂函數中使用 GetDate(),可以透過下列的範例程式即可達到該目的: ==程式碼開始==
-- 建立一個 UDF now()
CREATE FUNCTION dbo.now()
RETURNS DATETIME
AS
BEGIN
RETURN (GETDATE());
END;
GO

-- 測試看看是否真的有成兄ELECT dbo.now();
GO

-- 既然已經測試成功了,就可以移除
DROP FUNCTION dbo.now;
GO
==程式碼結束==

那如果是 SQL Server 2000 甚至是更早之前的版本呢?由於 SQL Sever 2005 是微軟花費了近五年時間,動用大批人員才完成的曠世鉅作,因此很 SQL Server 2005 獨有的功能,在舊版的 SQL Server 無法使用,像上述的程式碼在 SQL Server 2000 上執行便會有問題,此時,請改用下列程式碼:
==程式碼開始==
-- 設定 SQL Server 選項,使其允許加入 linked server
EXEC sp_serveroption '<您的SQL Server 名稱>', 'DATA ACCESS', TRUE
GO

-- 建立 UDF
CREATE FUNCTION dbo.now()
RETURNS DATETIME
AS
BEGIN
DECLARE @dt DATETIME
SELECT @dt = dt
FROM OPENQUERY
(
<您的SQL Server 名稱>, 'SELECT dt = GETDATE()'
)
RETURN @dt
END
GO

-- 測試一下吧
SELECT dbo.now()
GO

-- 測試成功,就可以將其移除
DROP FUNCTION now
GO
==程式碼結束==

請注意: 記得把 <您的SQL Server 名稱> 換掉,以符合您實際環境的 SQL Server 執行個體名稱。

2 則留言:

  1. 你好. 為何在我的 SQL2000 下, 照你的程式碼, SQL 編譯不過呢?

    PS: 我有把 SQL 伺服器換了喔!!

    回覆刪除
  2. 請問出現什麼錯誤訊息?是否有先建立 Linked Server?

    回覆刪除