0

パッケージ変数 (User::LastUpdate) に対してテーブルの日付フィールド (MODIFYDATE) をチェックして、データベースから一連のレコードを取得する SSIS パッケージを作成しようとしています。MODIFYDATE が LastUpdate 以降のレコードが選択されます。

DateDiff とビットを返す UDF を使用して (どちらも間隔として Second を使用しています)、この 2 つの方法を試しましたが、両方の方法で同じ問題に遭遇しました。日付の一致は 2 日ずれているようです。

LastUpdate が 2013 年 1 月 22 日 0:00 に設定されている場合、2 つのレコードが返されます。ただし、LastUpdate が 2013 年 1 月 20 日 12:00 までに設定されない限り、どちらも返されません。それより前に設定すると、両方とも返されます。それ以降の場合、どちらも返されません。

行は、SSIS パッケージの OLE DB ソース コンポーネントに取り込まれています。クエリ ビルダーにアクセスしてそこからクエリを実行し、日付を手動で指定すると、正しい行が返されます。ブレークポイントを挿入し、行がプルされたときに LastUpdate に正しい日付が含まれていることを確認しました (LastUpdate の値は、パッケージの前のストアド プロシージャによって提供されます)。

現在のクエリは次のとおりです。

SELECT ACTIVITIES.*
FROM ACTIVITIES LEFT OUTER JOIN
ArchivedEvents ON ACTIVITIES.FBC_EVENTSID = 
    ArchivedEvents.FBC_EVENTSID
WHERE (dbo.IsDateInOrder(?, ACTIVITIES.MODIFYDATE) = 1) OR
(dbo.IsDateInOrder(?, ArchivedEvents.MODIFYDATE) = 1)

そして、私が作成した関数

CREATE FUNCTION [dbo].[IsDateInOrder] 
(
    @Date1 DateTime,
    @Date2 DateTime
)
RETURNS bit
AS
BEGIN
    DECLARE @retval bit

    if DATEDIFF(s, @Date1, @Date2) >= 0
        SET @retval = 1
    else
        SET @retval = 0

    RETURN @retval

END

GO
4

0 に答える 0