首先,你不需要修改任何視圖。相應表中的任何更改都會自動反映在您的視圖中。
如果不是,可能是因爲如果未使用schemabinding
創建視圖,則應在對影響視圖底層的對象進行更改時運行sp_refreshview
,以影響視圖的定義。否則,查詢時查看可能會產生意想不到的結果。正如@Ralf建議的那樣,我+1那個答案,用sp_refreshview
來更新視圖。
For your comment ALTER TABLE ALTER COLUMN Company failed because one or more objects access this column.
這是因爲某些約束或索引正在使用該列,必須首先刪除該列,然後只有您可能能夠更改該列。
您可以使用查詢查找相關約束:
select db_name() as CONSTRAINT_CATALOG
,t_obj.name as TABLE_NAME
,user_name(c_obj.uid) as CONSTRAINT_SCHEMA
,c_obj.name as CONSTRAINT_NAME
,col.name as COLUMN_NAME
,col.colid as ORDINAL_POSITION
,com.text as DEFAULT_CLAUSE
from sysobjects c_obj
join syscomments com on c_obj.id = com.id
join sysobjects t_obj on c_obj.parent_obj = t_obj.id
join sysconstraints con on c_obj.id = con.constid
join syscolumns col on t_obj.id = col.id
and con.colid = col.colid
where
c_obj.uid = user_id()
砸&列任何索引和/或約束,則嘗試改變,就必須工作,然後。
也可參考這個問題的答案Drop a column from table problem (SQL Server 2008)
希望它能幫助。
由於視圖只是一個或多個表中數據的視圖,因此不需要更改視圖的數據類型 - 它應該自動完成 – duDE
不,您*不希望這樣做。 – podiluska
謝謝,:)在修改表時,它拋出一個錯誤,「ALTER TABLE ALTER COLUMN公司失敗,因爲一個或多個對象訪問此列」,我可以編寫一些代碼來禁用此依賴關係一段時間,然後恢復它 – sumit