日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SQL Server基础知识之:设计和实现视图

發(fā)布時(shí)間:2023/11/27 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server基础知识之:设计和实现视图 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

設(shè)計(jì)和實(shí)現(xiàn)視圖可謂是數(shù)據(jù)庫物理設(shè)計(jì)中的一個(gè)非常重要的步驟。從一般意義上說,設(shè)計(jì)和實(shí)現(xiàn)視圖應(yīng)該遵循下面的一些建議和原則。

以下內(nèi)容摘在文檔,我對(duì)某些重點(diǎn)進(jìn)行了補(bǔ)充說明(紅色部分)

只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建視圖。 但是,如果使用分布式查詢定義視圖,則新視圖所引用的表和視圖可以存在于其他數(shù)據(jù)庫甚至其他服務(wù)器中。
  • 分布式視圖是可行的,但隨著SQL Server本身能力的提高,例如SQL Server 2005開始支持表分區(qū)等技術(shù)之后,分布式視圖應(yīng)該盡量少用。
  • 所謂分布式視圖的一個(gè)最大的問題就是將表物理上分開在多個(gè)數(shù)據(jù)庫甚至服務(wù)器中,這增加了維護(hù)和查詢的難度
視圖名稱必須遵循標(biāo)識(shí)符的規(guī)則,且對(duì)每個(gè)架構(gòu)都必須唯一。 此外,該名稱不得與該架構(gòu)包含的任何表的名稱相同。
  • 一個(gè)可以借鑒的做法是:在視圖名稱之前添加一個(gè)前綴 vw
您可以對(duì)其他視圖創(chuàng)建視圖。Microsoft SQL Server 允許嵌套視圖。但嵌套不得超過 32 層。 根據(jù)視圖的復(fù)雜性及可用內(nèi)存,視圖嵌套的實(shí)際限制可能低于該值。
  • 一般不建議超過2層
不能將規(guī)則或 DEFAULT 定義與視圖相關(guān)聯(lián)。 不能將 AFTER 觸發(fā)器與視圖相關(guān)聯(lián),只有 INSTEAD OF 觸發(fā)器可以與之相關(guān)聯(lián)。
  • 除非萬不得已,一般不建議使用觸發(fā)器
定義視圖的查詢不能包含 COMPUTE 子句、COMPUTE BY 子句或 INTO 關(guān)鍵字。
  • 很多朋友不知道:COMPUTER和COMPUTER BY語句僅僅用于一些特殊場合,用于生成總計(jì)行。大致有如下的效果

該特性不能用于視圖,但可以直接用于查詢

?

定義視圖的查詢不能包含 ORDER BY 子句,除非在 SELECT 語句的選擇列表中還有一個(gè) TOP 子句。
  • 這個(gè)很有意思,如果要訪問所有的呢,還必須是寫TOP 100 PERCENT
定義視圖的查詢不能包含指定查詢提示的 OPTION 子句。 定義視圖的查詢不能包含 TABLESAMPLE 子句。
  • 關(guān)于TABLESAMPLE語句,大家可能也比較陌生,這是一個(gè)用于對(duì)數(shù)據(jù)進(jìn)行抽樣的。它和TOP語句不同,TOP語句是有固定大小的,而TABLESAMPLE返回的數(shù)據(jù),可能多,可能少,甚至可能沒有
  • 我之前有一篇文章講述這個(gè)語法 http://www.cnblogs.com/chenxizhang/archive/2009/05/19/1460040.html
不能為視圖定義全文索引定義。 不能創(chuàng)建臨時(shí)視圖,也不能對(duì)臨時(shí)表創(chuàng)建視圖。
  • 在SQL Server 2005中,可以通過CTE(Common Table Expression)來實(shí)現(xiàn)該功能
  • 之前的版本,大致的做法是使用臨時(shí)表,表變量,函數(shù)等等
不能刪除參與到使用 SCHEMABINDING 子句創(chuàng)建的視圖中的視圖、表或函數(shù),除非該視圖已被刪除或更改而不再具有架構(gòu)綁定。 另外,如果對(duì)參與具有架構(gòu)綁定的視圖的表執(zhí)行 ALTER TABLE 語句,而這些語句又會(huì)影響該視圖的定義,則這些語句將會(huì)失敗。
  • 如果未使用 SCHEMABINDING 子句創(chuàng)建視圖,則對(duì)視圖下影響視圖定義的對(duì)象進(jìn)行更改時(shí),應(yīng)運(yùn)行 sp_refreshview。 否則,當(dāng)查詢視圖時(shí),可能會(huì)生成意外結(jié)果
    • 如果你修改了一個(gè)表,那么如何刷新所有與該表有關(guān)的視圖呢
      • http://msdn.microsoft.com/zh-cn/library/ms187821(SQL.90).aspx
  • 強(qiáng)烈建議對(duì)某些非常重要的視圖,添加SCHEMABINDING 子句。

盡管查詢引用一個(gè)已配置全文索引的表時(shí),視圖定義可以包含全文查詢,仍然不能對(duì)視圖執(zhí)行全文查詢。 下列情況下必須指定視圖中每列的名稱:
  • 視圖中的任何列都是從算術(shù)表達(dá)式、內(nèi)置函數(shù)或常量派生而來。
  • 視圖中有兩列或多列原應(yīng)具有相同名稱(通常由于視圖定義包含聯(lián)接,因此來自兩個(gè)或多個(gè)不同表的列具有相同的名稱)。
  • 希望為視圖中的列指定一個(gè)與其源列不同的名稱。 (也可以在視圖中重命名列。) 無論重命名與否,視圖列都會(huì)繼承其源列的數(shù)據(jù)類型。

    若要?jiǎng)?chuàng)建視圖,您必須獲取由數(shù)據(jù)庫所有者授予的此操作執(zhí)行權(quán)限,如果使用 SCHEMABINDING 子句創(chuàng)建視圖,則必須對(duì)視圖定義中引用的任何表或視圖具有相應(yīng)的權(quán)限。

    默認(rèn)情況下,由于行通過視圖進(jìn)行添加或更新,當(dāng)其不再符合定義視圖的查詢的條件時(shí),它們即從視圖范圍中消失。 例如,創(chuàng)建一個(gè)定義視圖的查詢,該視圖從表中檢索員工的薪水低于 $30,000 的所有行。如果員工的薪水漲到 $32,000,因其薪水不符合視圖所設(shè)條件,查詢時(shí)視圖不再顯示該特定員工。 但是,WITH CHECK OPTION 子句強(qiáng)制所有數(shù)據(jù)修改語句均根據(jù)視圖執(zhí)行,以符合定義視圖的 SELECT 語句中所設(shè)條件。 如果使用該子句,則對(duì)行的修改不能導(dǎo)致行從視圖中消失。 任何可能導(dǎo)致行消失的修改都會(huì)被取消,并顯示錯(cuò)誤。

本文由作者:陳希章 于 2009/6/15 17:31:29 發(fā)布在:http://www.cnblogs.com/chenxizhang/
本文版權(quán)歸作者所有,可以轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
更多博客文章,以及作者對(duì)于博客引用方面的完整聲明以及合作方面的政策,請(qǐng)參考以下站點(diǎn):陳希章的博客中心

轉(zhuǎn)載于:https://www.cnblogs.com/chenxizhang/archive/2009/06/15/1503770.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server基础知识之:设计和实现视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。