Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向视图中的派生表添加新列_Sql_Sql Server_Tsql_Sql View_Derived Table - Fatal编程技术网

Sql 向视图中的派生表添加新列

Sql 向视图中的派生表添加新列,sql,sql-server,tsql,sql-view,derived-table,Sql,Sql Server,Tsql,Sql View,Derived Table,我试图弄清楚如何在不修改基础表的情况下向视图中的派生表添加新列。让我解释一下我必须做什么: 我需要向运行在SQL Server上的现有RIS应用程序添加一个简化的MQSA模块。我需要显示一份患者名单,这些患者的乳腺MRI非专业信件需要邮寄,每11个月一次。一旦列表上的项目被打印出来,它就需要从列表中消失,直到再次到期 为了做到这一点,我需要一个额外的列记录最后的打印日期。如果当前日期和上次打印日期之间的天数大于334天,则需要在列表中显示 我的问题是不允许修改现有数据库,因此我必须将此列放在一个

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

我需要向运行在SQL Server上的现有RIS应用程序添加一个简化的MQSA模块。我需要显示一份患者名单,这些患者的乳腺MRI非专业信件需要邮寄,每11个月一次。一旦列表上的项目被打印出来,它就需要从列表中消失,直到再次到期

为了做到这一点,我需要一个额外的列记录最后的打印日期。如果当前日期和上次打印日期之间的天数大于334天,则需要在列表中显示

我的问题是不允许修改现有数据库,因此我必须将此列放在一个新表中,在一个单独的数据库中。我在这个单独的数据库中创建了一个视图,其中包含现有数据库中的表,该数据库以正确的格式提供未过滤数据的列表

我在新数据库中添加了一个表,该表记录了相关ID以及打印列表中项目时的最后打印日期。我已经将这个新表添加到视图中,并与其中一个表进行了左外连接,并检查了last date printed列,以便成为结果列表的一部分

我不知道如何将新表与视图结合起来,以便只显示应打印的外业字母。新表当然是空的,因为还没有打印任何数据,所以表中还没有数据。出于好奇,我已经手动将两列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)) 
我对触发器了解不多,所以考虑到我正在使用一个包含多个表的视图,我不知道这是否是一个选项

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

谢谢


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

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

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

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

通过修改现有查询以在LastPrintDate为空时使用SignedDate解决了此问题。谢天谢地,我不需要复制任何东西或做任何异国情调的事情。答案一直摆在我面前,我看不见。

我已经看到了——我的帖子上也这么说。也许我误解了你的意思。@user1108996。Iw对这句话做出了回应,如果我能够以某种方式将数据从视图复制到这个新表中,它会自动更新自身以反映视图中的更改,我可以像这样轻松地完成我的任务:您不需要复制数据,您可以只使用视图。视图中的表是从默认数据库中放入的,所有数据都在默认数据库中,但一个新表除外,该表包含LastPrintDate列,该列是查询的锚点。此表为空,因为尚未打印任何内容。LastPrintDate没有值表示显示零结果。如果我可以将一些数据复制到这个表中,那么我可以用一个默认日期填充LastPrintColumn,从中可以计算结果。这一个表必须自我更新以反映其他表中的更改。