轉自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我們熟知一個視圖需要滿足以下條件,我們才可以使用upate視圖來通過視圖修改數據的目標,那麼現在有一個需求,領導需要我們建立一個視圖,並且禁止通 ...
轉自:http://www.maomao365.com/?p=4508
<span style="color:red;font-weight:bold;">
我們熟知一個視圖需要滿足以下條件,我們才可以使用upate視圖來通過視圖修改數據的目標,
那麼現在有一個需求,領導需要我們建立一個視圖,並且禁止通過視圖來修改數據。
<hr />
首先我們可通過視圖修改數據的先決條件:
1 創建視圖的語句中,沒有聚合函數,沒有使用 group by top union distinct等關鍵字
2 沒有使用其它方法派生出的新列
3 視圖中至少存在一個表
</span>
<hr />
那麼我們現在需要達到禁止通過視圖修改數據的目的,我們需反向操作,例:
下文我們採用union 組合一個空列來達到禁止修改視圖的方法
/*1 建表*/ create table A (keyId1 int ,info1 int) create table B (keyId2 int,info2 int) insert into A values(1,2),(3,4) insert into B values(1,6),(7,8) go /*2 創建視圖 採用union all 關鍵字來禁止對視圖進行修改*/ create view A_vw as select keyId1,info1,info2,keyId2 from A a left join B b on a.keyId1 = b.keyId2 union all select top 0 0 as keyId1,0 as info1,0 as info2,0 as keyId2 go /*3 對視圖修改返回相應的錯誤信息*/ update A_vw set info2 =900 where keyId1=1 go