mssql sql server上如何建一個只讀視圖–視圖鎖定的另類解決方案


轉自: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM