非确定性函数的替代SqlDependency?

时间:2018-01-26 19:07:23

标签: sql-server-2008 sqldependency non-deterministic

我需要在SqlDependency上使用getdate()函数,但这是limitations的一部分。 (非确定性函数)

我有什么替代方案?

1 个答案:

答案 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;