SQL查询通知和GetDate()

时间:2009-10-30 12:49:30

标签: sql-server notificationservices

我目前正在处理为Query Notifications注册的查询。根据Notification Serivces的规则,我只能在为订阅设置的查询中使用确定性函数。但是,GetDate()(以及我能想到的几乎任何其他方法)都是非确定性的。每当我提取数据时,我希望能够将结果集限制为仅由当前日确定的相关记录。

是否有人知道我可以使用哪种方法可以使用当前日期来过滤我的结果但不会使查询通知的查询无效?

示例代码:

SELECT fcDate as RecordDate, fcYear as FiscalYear, fcPeriod as FiscalPeriod, fcFiscalWeek as FiscalWeek, fcIsPeriodEndDate as IsPeriodEnd, fcPeriodWeek as WeekOfPeriod
FROM dbo.bFiscalCalendar 
WHERE fcDate >= GetDate() -- This line invalidates the query for notification...

其他想法:

我们的数据库中有一个应用程序控制表,用于存储应用程序级别设置。我原本想过写一个小脚本来保持最新的记录与当前的smalldatetime。但是,我加入这个表也没有通知,我不知道为什么。我猜测它有一些事情需要我指定一个文本类型(列名称),这是令人沮丧的。

示例代码2:

SELECT fcDate as RecordDate, fcYear as FiscalYear, fcPeriod as FiscalPeriod, fcFiscalWeek as FiscalWeek, fcIsPeriodEndDate as IsPeriodEnd, fcPeriodWeek as WeekOfPeriod
FROM dbo.bFiscalCalendar    
INNER JOIN dbo.xApplicationControls ON  fcDate >= acValue AND acName = N'Cache_CurrentDate' 

有人有任何建议吗?

编辑:这是link on MSDN,它提供了Notification Services的规则

2 个答案:

答案 0 :(得分:3)

事实证明,我找到了解决方案。基本上,我使查询尝试无效,因为我将一个值转换为DateTime,将其标记为非确定性。即使你没有专门召集演员,但做了类似的事情:

RecordDate = 'date_string_value'

你仍然最终没有约会。希望这会帮助那些遇到这个问题的人。

这个链接对我有所帮助。

http://msdn.microsoft.com/en-us/library/ms178091.aspx

答案 1 :(得分:0)

绕过这个的一个好方法就是创建一个只显示“SELECT GetDate()AS Now”的视图,然后在查询中使用该视图。

编辑:我没有看到没有使用用户定义的函数(这就是我今天使用的'今日视图'位)。那么你可以在指向视图的查询中使用UDF吗?