0

我目前正在处理为查询通知注册的查询。根据通知服务的规则,我只能在为订阅设置的查询中使用确定性函数。但是,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' 

有没有人有什么建议?

编辑:这是MSDN上的一个链接,它给出了通知服务的规则

4

2 回答 2

3

事实证明,我想出了解决方案。基本上,我使我的查询尝试无效,因为我将一个值转换为 DateTime,将其标记为非确定性。即使您没有专门调用演员表,但会执行类似于:

RecordDate = 'date_string_value'

你最终还是会得到一个日期演员表。希望这将帮助其他遇到此问题的人。

这个链接对我帮助很大。

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

于 2009-10-30T13:44:48.730 回答
0

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

编辑:我看不到不使用用户定义的函数(这是我使用的“今天的视图”位)。那么您可以在指向视图的查询中使用 UDF 吗?

于 2009-10-30T12:54:10.810 回答