2013-04-03 92 views
0

我想弄清楚如何在不修改基礎表的情況下將新列添加到視圖中的派生表。讓我解釋我必須做什麼:將新列添加到視圖中的派生表

我需要將簡化的MQSA模塊添加到在SQL Server上運行的現有RIS應用程序。我需要顯示一份病人名單,這些病人的乳房核磁共振信號是由郵寄到期的,每11個月發生一次。一旦列表中的項目被打印,它就需要從列表中刪除,直到它再次到期。

爲了做到這一點,我需要一個額外的列記錄最後的打印日期。如果當前日期和上次打印日期之間的天數大於334天,則需要在列表中顯示。

我的問題是,我不允許修改現有的數據庫,所以我必須在一個新的表中,在一個單獨的數據庫內有這個列。我在這個單獨的數據庫中創建了一個視圖,其中有來自現有數據庫的表格,這個數據庫以正確的格式給出了未過濾的數據列表。

我已經在新數據庫中添加了一個表格,用於記錄列表中的項目打印時相關ID和上次打印日期。我已將這個新表添加到視圖中,並將左外連接添加到其中一個表中,並檢查最後一個打印日期列以成爲結果列表的一部分。

我無法弄清楚如何將新表與視圖一起顯示,以便只顯示適合打印的字母。新表當然是空的,沒有數據,因爲還沒有打印任何數據。出於好奇,我已經手動將數據(兩列ID)複製到新表中,以測試它是否可以工作,並且確實如此,它可以正常工作。

如果我能以某種方式從視圖中的數據複製到這個新表,將自動更新,以反映看法的變化,我可以輕鬆地完成我的任務,像這樣:

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)) 

我不對觸發器知之甚多,所以我不知道這是否是一種選擇,因爲我正在處理一個有多個表的視圖。

任何想法,將不勝感激。我只需要知道我應該開始研究的方向。

謝謝!

編輯:也許我的問題應該是如何鏡像另一個數據庫中的表?

回答

1

爲什麼不加入舊數據庫中的視圖?

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

你也可以將它包裝在新數據庫的視圖中。

+0

我已經有了 - 它在我的文章中這麼說。也許我誤解你在說什麼。 – user1108996 2013-04-03 22:02:06

+0

@ user1108996。 。 。 Iw迴應說:「如果我能以某種方式將視圖中的數據複製到這個新表中,它會自動更新以反映視圖中的變化,我可以像這樣輕鬆完成我的任務:」您不需要複製數據,你可以使用視圖。 – 2013-04-03 22:03:59

+0

視圖中的表從缺省數據庫中刪除,其中所有數據都是 - 除了包含作爲查詢的錨點的LastPrintDate列的一個新表之外。此表爲空,因爲尚未打印任何內容。 LastPrintDate沒有值意味着顯示零結果。如果我可以將一些數據複製到此表中,則可以用LastPrintColumn填充可計算結果的默認日期。這一張表必須更新以反映其他表中的更改。 – user1108996 2013-04-03 22:26:50

0

如果LastPrintDate爲null,則通過修改現有查詢以使用SignedDate來解決問題。謝天謝地,我不需要複製任何東西或做任何異國情調。答案始終在我面前,我看不到它。