2009-10-30 80 views
0

我目前正在为查询通知注册的查询。根据Notification Serivces的规则,我只能在为订阅设置的查询中使用确定性函数。但是,GetDate()(以及我能想到的几乎任何其他方法)都是非确定性的。每当我提取数据时,我希望能够将结果集限制为仅由当天确定的相关记录。SQL查询通知和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... 

其他的想法:

我们已经在我们的数据库应用程序的控制表,我们用它来存储应用程序级别设置。我曾想过编写一个小脚本,保持记录最新的w/teh当前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,让通知服务规则

回答

2

事实证明,我找到了解决方案。基本上,我使查询尝试失效,因为我将一个值作为DateTime标记为非确定性。即使你没有专门调出演员阵容,但要做类似的事情:

RecordDate = 'date_string_value' 

你还是会以w/a日期演员结束。希望这会帮助解决这个问题的其他人。

这个链接对我很有帮助。

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

+0

好的链接:)我建议将此标记为答案 – MartW 2009-10-30 14:12:58

0

绕过一个很好的办法就是创建一个视图,只是说:“SELECT GETDATE()和现在一样”,然后使用视图您的查询。

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

+0

不幸的是,意见不允许在通知服务查询或者进行访问。 – Nathan 2009-10-30 12:58:04

+0

UDF如何?我看到没有提及他们被禁止 – MartW 2009-10-30 13:10:52

+0

UDF的允许,但只有当他们也不包含非确定性函数(至少,我99%肯定这是正确的)。但我会仔细检查这个选项。谢谢。 – Nathan 2009-10-30 13:12:37