2017-09-12 26 views
0

我和我的團隊正在使用的Microsoft SQL Server 2014 - 標準版SQL服務器,查看已混了數據

我們已經創造了一些意見,我們平時做的,他們的工作(64位)(ED)通常在我們編碼和測試的時候。

突然,我們的QA的人注意到,在應用程序中的數據混合起來,例如,描述數據是在場,是其中本來是要是等

我們在表cheched數據,這是正確的,那麼我們檢查的視圖,查詢這樣SELECT *的從視角並實現該視圖有數據混合起來。。下一個邏輯步驟是檢查查看查詢,令我們驚訝的是所有查詢都是正確的。那麼發生了什麼?

那麼,這是一個問題,爲什麼視圖中的數據損壞或混淆了,如果視圖內的查詢是正確的,並且它們長時間運行良好?

我們只是ALTER ED視圖,不修改任何東西,並解決了問題。

但是,我們需要知道數據損壞的原因,因爲我們不希望始終監視和更改視圖。

查看代碼的要求

ALTER VIEW [dbo].[pvvClient] AS 
SELECT * 
FROM Table 
INNER JOIN Table 2 ON..... 

是來到我的腦海裏的第一件事是,表(S)發生了變化,並且提出了這個問題,你覺得SCHEMABINDING可以幫助避免這類問題

+2

您的觀點是否包含*?請粘貼視圖的內容。我敢打賭,你錯過了一些逗號,所以有些列被解釋爲其他列的別名。 – Bridge

+0

表pvtConsumidorFinanciero是否包含與select子句中的其他字段/別名具有相同名稱的任何字段? –

+0

@DanBracuk不,它甚至在我們的EF模型中引用 –

回答

2

沒有任何意義,只是改變視圖而不更改任何代碼就可以修復它,但重要的一點是您的視圖的這一部分...

select pvtConsumidorFinanciero.*

如果這個表定義的變化......是,如果更多的列被添加或者一些被刪除,該視圖中的列也將改變。這就是爲什麼在視圖中從不選擇*是一種很好的做法,尤其是在查詢另一個視圖時。

此外,此表可以具有與其他表相同的列名。

還可能發生的事情是在您的應用程序中,您是select * from view。同樣,如果DBA改變了視圖,這可能會弄亂你的應用程序,所以我會避免它顯式列出你想要返回的順序返回的列。

0

我覺得這也是部分答案:

當您創建的意見是使用一個很好的做法SCHEMABINDING,當您更改視圖下表這種方式,你不得不審查你的觀點也是如此。

相關問題