2012-08-15 61 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