非确定性函数的替代 SqlDependency?
Alternative SqlDependency for non-deterministic functions?
我需要在 SqlDependency 上使用 getdate()
函数,但那是其 limitations 的一部分。 (非确定性函数)
我有什么选择?
一个函数将是确定性的,如果它returns始终具有相同的值 - 只要您使用相同的参数针对相同的数据调用它.很明显,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;
我需要在 SqlDependency 上使用 getdate()
函数,但那是其 limitations 的一部分。 (非确定性函数)
我有什么选择?
一个函数将是确定性的,如果它returns始终具有相同的值 - 只要您使用相同的参数针对相同的数据调用它.很明显,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;