現在、クエリ通知に登録されているクエリに取り組んでいます。通知サービスの規則に従い、サブスクリプション用に設定されたクエリでは決定論的関数のみを使用できます。ただし、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のリンクは次のとおりです。