0

基になるテーブルを変更せずに、ビュー内の派生テーブルに新しい列を追加する方法を見つけようとしています。私がしなければならないことを説明しましょう:

SQL Server で実行される既存の RIS アプリケーションに、単純化された MQSA モジュールを追加する必要があります。11 か月ごとに行われる、乳房 MRI の一般書簡が郵送される予定の患者のリストを表示する必要があります。リストのアイテムが印刷されると、次の期日までリストから外される必要があります。

これを行うには、最後の印刷日を記録する追加の列が必要です。現在の日付と最後に印刷された日付の間の日数が 334 日を超える場合は、リストに表示する必要があります。

私の問題は、既存のデータベースを変更することが許可されていないため、この列を別のデータベース内の新しいテーブルに含める必要があることです。この別のデータベースに、既存のデータベースからテーブルを含むビューを作成しました。これにより、フィルター処理されていないデータのリストが正しい形式で表示されます。

関連する ID と、リストの項目が印刷された最終印刷日を記録するテーブルを新しいデータベースに追加しました。この新しいテーブルを、テーブルの 1 つに左外部結合を使用してビューに追加し、最後に印刷された日付の列をチェックして、結果のリストの一部になるようにしました。

新しいテーブルをビューと一緒にして、印刷予定のレイレターのみを表示する方法がわかりません。もちろん、新しいテーブルは空で、まだ何も印刷されていないため、データはまだありません。好奇心から、データ (ID の 2 つの列) を新しいテーブルに手動で複製して、それが機能するかどうかをテストしました。期待どおりに機能しました。

ビューのデータをこの新しいテーブルに何らかの方法でレプリケートできれば、それ自体が自動的に更新されてビューの変更が反映され、次のように簡単にタスクを達成できます。

SELECT 
    PersonID, 
    PatientID, 
    ModalityID, 
    ReportID, 
    FirstName, 
    LastName, 
    HomePhone, 
    WorkPhone,
    LastPrintDate, 
    CONVERT(VARCHAR(10), SignedDate, 101) AS SignedDate 
FROM 
    mqsa.dbo.vw_mq_LayLetterAlerts_Derived 
WHERE (ModalityID = 4) 
    AND (GETDATE() >= DATEADD(day, 334, LastPrintDate)) 

私はトリガーについてあまり知らないので、複数のテーブルを含むビューで作業していることを考えると、それがオプションになるかどうかはわかりません。

どんなアイデアでも大歓迎です。どの方向に研究を始めるべきかを知る必要があるだけです。

ありがとう!

編集:おそらく私の質問は、別のデータベースのテーブルをミラーリングする方法でしょうか?

4

2 に答える 2

1

古いデータベースのビューに参加してみませんか?

select <cols>
from olddb..vw_OLDVIEW left outer join
     newdb..PrinterTable
     on <whatever>
where <filters>

これを新しいデータベースのビューにラップすることもできます。

于 2013-04-03T21:55:52.807 に答える
0

LastPrintDate が null の場合に SignedDate を使用するように既存のクエリを変更して、問題を解決しました。ありがたいことに、何も複製したり、変わったことをしたりする必要はありませんでした。答えはずっと目の前にあり、見えなかった。

于 2013-04-04T18:58:34.753 に答える