在视图中将新列添加到派生表

时间:2013-04-03 20:58:50

标签: sql sql-server tsql sql-view derived-table

我试图弄清楚如何在不修改基础表的情况下向视图中的派生表添加新列。让我解释一下我要做的事情:

我需要将简化的MQSA模块添加到在SQL Server上运行的现有RIS应用程序。我需要显示一份患者名单,其中包括用于乳房MRI的非专业信件,应该每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)) 

我对触发器知之甚少,所以我不知道这是否可以考虑我正在使用包含多个表的视图。

任何想法都将不胜感激。我只需要知道我应该从哪个方向开始我的研究。

谢谢!

编辑:也许我的问题应该是如何镜像另一个数据库中的表?

2 个答案:

答案 0 :(得分:1)

为什么不加入旧数据库中的视图?

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

您也可以将它包装在新数据库的视图中。

答案 1 :(得分:0)

如果LastPrintDate为null,则通过修改现有查询以使用SignedDate来解决问题。值得庆幸的是,我不需要复制任何东西或做任何异国情调。答案一直摆在我面前,我看不到它。