有沒有一種方法可以使SELECT *與底層表保持同步。SQL Server:如果底層表發生更改,則需要重新創建使用SELECT *的視圖
我發現的是,如果對從中選擇所有列的基礎表進行更改,則需要「重新創建」視圖。這可以通過運行ALTER VIEW語句來實現。
但是,這可能會導致一些非常危險的情況。如果您忘記重新創建視圖,它將不會返回正確的數據。事實上,它可能會嚴重返回混亂的數據 - 所有列的名稱都是錯誤的和亂序的。
除非您碰巧遇到了測試或數據完整性檢查失敗,否則沒有任何東西會顯示視圖錯誤。例如,Red Gate SQL Compare沒有提到需要重新創建視圖的事實。
複製的問題,請嘗試以下語句:
CREATE TABLE Foobar (Bar varchar(20))
CREATE VIEW v_Foobar AS SELECT * FROM Foobar
INSERT INTO Foobar (Bar) VALUES ('Hi there')
SELECT * FROM v_Foobar
ALTER TABLE Foobar
ADD Baz varchar(20)
SELECT * FROM v_Foobar
DROP VIEW v_Foobar
DROP TABLE Foobar
我很想停止使用SELECT *的意見,這將是一個PITA。有沒有設置某處可能可以解決此問題?
不要在視圖中使用SELECT *而是使用明確的列列表。 – 2010-04-27 07:30:40