2012-08-15 75 views
0

多年来一直运行的视图从多个表中选择特定列并加入它们。 最近,我在其中一个表中添加了一列,并且vew不再正常工作。 查询结果中的一列包含来自表中另一列的数据。 我重建了一个脚本的视图 - 没有改变脚本 - 并且问题消失了。 该视图不会查看新列。奇怪的SQL行为

这是怎么回事?

+0

我不知道,但是如果你张贴表格,你想要什么连接以及在视图中你想要什么字段,我们可以尝试为你编写它? – JonH 2012-08-15 17:43:50

+1

请发布更多关于您的表结构和sql语句的具体信息,我们可能会帮助您弄清楚发生了什么。 – Charx 2012-08-15 17:50:56

+0

“不再正常工作”和“问题消失”是什么意思?你的视图是否使用'SELECT *'? http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list.aspx – 2012-08-15 18:18:51

回答

0

您的查询使用SELECT *。你只需要重新编译它。

编译视图时,它编译记录中字段的偏移量,而不是字段的名称。如果基础表更改。 。 。好吧,抵消不再去正确的位置。

不幸的是,我经过大约5个小时试图弄清楚为什么一个数字出现数字错误 - 从早上6点开始学会了这一点。所以,这个问题甚至会影响不同类型的数据。

我通过脚本出来的观点作为ALTER,使用SQL Server Management Studio,然后运行该代码(没有任何改变)重新编译。但是,您可以通过放入明确的列列表来更改代码,并且将来不会遇到此问题。

您还可以设置一个脚本,每晚重新编译所有视图,以防止将来出现此问题。我们现在也有这样的脚本。

+0

是的,其中一个表使用*,似乎是问题所在。 – 2012-08-16 01:52:42