【发布时间】:2015-02-17 00:30:05
【问题描述】:
有一个非常奇怪的情况。出于各种原因,我们有一堆表格是这样做的:
TableA 重命名为 TableASource 并创建了一个名为 TableA 的视图 TableB 被重命名为 TableBSource 并创建了一个名为 TableB 的视图
这一切都很好,并且已经完成了一段时间。昨天我向 TableASource、TableBSource(和其他)添加了一个新字段。这是一个名为“createDate”的字段,一个 smallDateTime,没有空值,默认值为 getDate()。你会认为这对任何事情都应该是零影响。今天,用户说的第一件事就是他们可以看到这些日期而不是预期的数据。 E.G 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....
EDITING - 由于一些试验错误。事实证明,试验实际上是下面 JohnS 的建议。重新创建视图....我将视图重命名为baytraincourses_broken。然后右键单击 > 脚本视图为 > 创建为 > 然后我将“baytraincourses_broken”更改为“baytraincourses”以使用原始名称重新创建另一个版本。现在页面可以工作了。
我不是观点的忠实拥护者。老实说,我创建它们非常罕见,我正在使用我最初没有编写的代码。每次添加新列时,我真的必须重新创建视图吗?当然不是,我该如何处理呢?
【问题讨论】:
-
当您将 10 列从数据库加载到您的页面中时,您正在运行什么查询?类似于:^Select * from TableA^?您在什么位置添加了该列?在其他人之间还是在“结束”?
-
你能给我们看一下视图的脚本吗?
-
是从 TableA 中选择 *。该列被添加到末尾
标签: sql sql-server sql-server-2008-r2