假如不使用instead of觸發器或可更新分區視圖而是通過視圖來修改數據,那么再修改之前,請考慮下列準則:
◆如果在視圖定義中使用了 with check option 子句,則所有在視圖上執行的數據修改語句都必須符合定義視圖的 select 語句中所設定的條件。如果使用了 with check option 子句,修改行時需注意不讓它們在修改完成后從視圖中消失。任何可能導致行消失的修改都會被取消,并顯示錯誤信息。
◆sql server 必須能夠明確地解析對視圖所引用基表中的特定行所做的修改操作。不能在一個語句中對多個基礎表使用數據修改語句。因此,列在 update 或 insert 語句中的列必須屬于視圖定義中的同一個基表。
◆對于基礎表中需更新而又不允許空值的所有列,它們的值在 insert 語句或 default 定義中指定。這將確保基礎表中所有需要值的列都可以獲取值。
◆在基礎表的列中修改的數據必須符合對這些列的約束,如為空性、約束、default 定義等。例如,如果要刪除一行,則相關表中的所有基礎 foreign key 約束必須仍然得到滿足,刪除操作才能成功。
◆分布式分區視圖(遠程視圖)不能使用鍵集驅動游標更新。此項限制可通過在基礎表上而不在視圖本身上聲明游標得到解決。
此外,如果在視圖中刪除數據:
◆在視圖定義的 from 子句中只能列出一個表。
不能在視圖中與text、ntext 或 image 列一起使用 readtext 和 writetext 語句。
新聞熱點
疑難解答