我需要在SqlDependency上使用getdate()
函数,但这是limitations的一部分。 (非确定性函数)
我有什么替代方案?
答案 0 :(得分:1)
如果函数始终返回相同的值,则该函数将 deterministic - 只要您使用相同参数对相同数据调用它即可。很明显,GETDATE()
或NEWID()
等函数不会满足此要求。
我所知道的唯一可能性是将非确定性值作为参数传递。看看这个:
--This will return the current date, but is non-determinisitic
CREATE FUNCTION dbo.TestFunc()
RETURNS DATETIME
WITH SCHEMABINDING
BEGIN
RETURN GETDATE();
END
GO
--returns 0
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].TestFunc'), 'IsDeterministic');
GO
--This is deterministic, as it returns nothing else, than the parameter
CREATE FUNCTION dbo.TestFunc2(@CurrentDate DATETIME)
RETURNS DATETIME
WITH SCHEMABINDING
AS
BEGIN
RETURN @CurrentDate;
END
GO
--returns 1
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].TestFunc2'), 'IsDeterministic');
GO
--Both return the current date and time
SELECT dbo.TestFunc() AS NonDeterministic
,dbo.TestFunc2(GETDATE()) AS Deterministic;
GO
--Cleaning
DROP FUNCTION dbo.TestFunc;
DROP FUNCTION dbo.TestFunc2;