添加字段以某种方式影响视图结果

时间:2015-02-17 00:30:05

标签: sql sql-server sql-server-2008-r2

有一个非常奇怪的情况。出于各种原因,我们有一堆表格已经完成:

将TableA重命名为TableASource,并创建一个名为TableA的视图 TableB被重命名为TableBSource,并创建了一个名为TableB的视图

这一切都很好,已经做了很长时间。昨天我向TableASource,TableBSource(和其他人)添加了一个新字段。这是一个名为“创建日期”的字段。 smallDateTime,没有空值,默认值为getDate()。你会认为这应该对任何事情都没有影响。今天,用户首先要说他们可以在预期数据中看到这些日期。 EG Lest说我们有一个页面从名为TableA的视图中提取了10个字段,而不是显示这10个字段,它现在正确显示9个字段并随机显示添加到TableASource的新createDate字段中的值(如果它放置它很重要在页面的第二个字段中)

我迅速删除了所有这些新的createDate字段,问题就消失了。怎么可能发生这种情况?如何在TableASource中添加一个字段来影响TableA视图的结果?

使用SQLServer2008 r2

回应下面的额外问题。以下是名为' bayTrainCourses'以上已经描述为TableA:

SELECT  btc.course_id, btc.course_name, btc.course_status, btc.course_expiry, btc.course_startdate, btc.course_enddate, btc.course_type, btc.site_id, btc.channelid, btc.exam_type, btc.enroll_type, btc.last_updated, btc.compid, btc.TOC, btc.rdone, btc.autoqualify, btc.courseIntroId, btc.coursePurposeId, btc.courseBackgroundId,btc.courseObjectivesId, intro.    [content] AS course_intro, purpose.[content] AS course_purpose, background.[content] AS course_background, 
objectives.[content] AS course_objectives
FROM dbo.bayTrainCoursesSource AS btc 
LEFT OUTER JOIN dbo.RTE AS intro ON btc.courseIntroId = intro.pk 
LEFT OUTER JOIN dbo.RTE AS purpose ON btc.coursePurposeId = purpose.pk 
LEFT OUTER JOIN dbo.RTE AS background ON btc.courseBackgroundId = background.pk 
LEFT OUTER JOIN dbo.RTE AS objectives ON btc.courseObjectivesId = objectives.pk

选择是:

select * from baytraincourses....

编辑 - 由于某些试验错误。事实证明,审判实际上是JohnS的建议。重新创建视图....我将视图重命名为baytraincourses_broken。然后右键单击>脚本视图为>创建到>然后我改变了#baytraincourses_broken' to' baytraincourses'使用原始名称重新创建另一个版本。现在页面有效。

我不是观点的忠实粉丝。我很难创建它们,说实话,我正在使用我最初没写过的代码。每次添加新列时,是否真的必须重新创建视图?当然不是,我怎么能处理这个?

1 个答案:

答案 0 :(得分:0)

将新字段添加到TableASource后,您需要重新创建视图。 (即DROP VIEW TableA ...然后CREATE VIEW TableA ...)。