SQL Server 自訂函數不允許直接呼叫非確定性函數(如 GETDATE()、NEWID()、RAND()),否則會報錯。
CREATE VIEW v_date AS
SELECT CONVERT(VARCHAR(10), GETDATE(), 20) AS dt; -- 格式:yyyy-mm-dd
CREATE FUNCTION my_func()
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @getdate VARCHAR(10);
SELECT @getdate = dt FROM v_date;
RETURN @getdate;
END
GO
v_date 每次查詢時會即時執行 GETDATE(),取得當前日期。SELECT @var = col FROM view 間接取得日期值,繞過限制。CONVERT(VARCHAR(10), GETDATE(), 20) 只取日期部份(不含時間),若需完整時間請調整格式碼。若僅需在預存程序或批次中使用,可直接宣告變數:
DECLARE @today DATE = CAST(GETDATE() AS DATE);
但此寫法不可用於函數內部。