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 に答える