sql server 2008学习9 视图
創建簡單視圖:
use test go create view v1(視圖名) as select name from b
這樣視圖就創建好了.
下面說下視圖的本質:
當執行? select * from v1 時,? 那么實質上市告訴 sql server 把執行 select name from b 語句返回的結果
給我.
視圖就像在命令執行的查詢那樣運行---沒有任何的預先優化過程.這意味著數據在請求和所交付的數據之間增加額額外
的一層系統開銷,而視圖的運行總是比 執行運行內部的sql 更慢.視圖存在的理由就是---對于用戶是安全或者簡化的.
- 視圖可以隱藏敏感數據,?
- 作為過濾器?? 例子如下: use test go create view v2 as select name from b where id=2
總結:視圖實際上 只是一個用戶不可見的 select語句.
更加復雜的視圖:
對視圖進行 insert update delete
使用 with check potion 限制插入到視圖中的內容。-- 為了通過使用視圖更新或者插入數據,結果行必須符合要求
以顯示在視圖結果中.? 也就是插入或者更新的行 必須滿足視圖中select語句的where條件,
看創建一個視圖,sql:
create view v4 as select name from a where name like 'a%' with check option .csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) }那么現在 向視圖插入一條數據:
insert into v4(name) values('ss') .csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) }那么sql 會報錯:
因為 子句過濾了? a% 內容,而 插入的ss不符合 這個過濾的條件,所以會報錯.
如果想知道某一個視圖的作用,那么可以用如下方法:
1.
use test go exec sp_helptext v4(視圖名) 返回如下信息: 2. select * from sys.sql_modules where [object_id]= object_id('v4') .csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) }結果如下:
加密視圖:
新建一個加密的視圖:
create view v5 with encryption as select name from a where name like 'a%' with check option 在運行 select * from sys.sql_modules where [object_id]= object_id('v5') .csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) } 查看視圖時: .csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) }definition變成了空值,無法看到視圖到底做了些什么.
如果對視圖使用了alter 命令,那么 如果不使用加密,那么 修改后的視圖,將變成非加密的.
總結
以上是生活随笔為你收集整理的sql server 2008学习9 视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东悦卫生间壁挂式暖风机电机是铜的东悦牌卫
- 下一篇: .net 调用 sql server 自