SQLServer實用基礎教程第8章視圖和用戶定義數(shù)據(jù)類型_第1頁
SQLServer實用基礎教程第8章視圖和用戶定義數(shù)據(jù)類型_第2頁
SQLServer實用基礎教程第8章視圖和用戶定義數(shù)據(jù)類型_第3頁
SQLServer實用基礎教程第8章視圖和用戶定義數(shù)據(jù)類型_第4頁
SQLServer實用基礎教程第8章視圖和用戶定義數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第8章 視圖和用戶定義數(shù)據(jù)類型 本章學習目標在數(shù)據(jù)庫中,有時為了查詢的方便,可以創(chuàng)建一個視圖,然后通過視圖來簡化查詢。而有時在設計表時, SQL Server提供的系統(tǒng)數(shù)據(jù)類型并不能完全滿足需要,這時就需要數(shù)據(jù)庫的實現(xiàn)者自己來定義一些數(shù)據(jù)類型。本章主要介紹了視圖和用戶自定義數(shù)據(jù)類型的各種具體操作方法,主要內容包括視圖的基本知識,視圖的創(chuàng)建、查看、修改和刪除方法,以及用戶自定義數(shù)據(jù)類型的創(chuàng)建、查看和刪除方法等。通過本章的學習,讀者就應能夠掌握視圖和用戶自定義數(shù)據(jù)類型的各種具體操作方法,并能夠在對數(shù)據(jù)庫的操作過程中對其進行應用,真正做到學以致用。 學習重點與難點 視圖的概念和優(yōu)缺點 視圖的查看和管

2、理 視圖的修改和刪除 用戶自定義數(shù)據(jù)類型的創(chuàng)建 用戶自定義數(shù)據(jù)類型的管理81 視圖的概念視圖是從一個或多個表(視圖)導出的表,是數(shù)據(jù)庫用戶使用數(shù)據(jù)庫的觀點。它是用戶查看數(shù)據(jù)庫表中數(shù)據(jù)的一種方式,是基于某個查詢結果的虛擬表,用戶通過它來瀏覽表中感興趣的部分或全部數(shù)據(jù)。而數(shù)據(jù)的物理存放位置仍然在表中,這些表稱作視圖的基表。一個視圖可以派生于一個或多個基表,也可以從其它視圖中派生。視圖實際上發(fā)揮著過濾數(shù)據(jù)的作用。定義視圖的查詢語句可以從一個表、多個表或者其他視圖中引用數(shù)據(jù)。發(fā)布式數(shù)據(jù)庫查詢語句還可以定義、引用不同數(shù)據(jù)源的數(shù)據(jù)庫視圖。一般地,視圖的內容包括:基表的列的子集或行的子集;兩個或者多個基表的

3、聯(lián)合;兩個或者多個基表的連接;基表的統(tǒng)計匯總;另外一個視圖的子集;視圖和基表的混合。視圖和表是有本質區(qū)別的:視圖在數(shù)據(jù)庫中存儲的是視圖的定義,而不是查詢的數(shù)據(jù)。當SQL SERVER處理視圖的操作時,它會在數(shù)據(jù)庫中找到視圖的定義,然后把對視圖的查詢轉化為視圖基本表的查詢。82 視圖的優(yōu)缺點視圖常用于聚焦、簡化和定制用戶對數(shù)據(jù)庫的感知和控制,它也可以作為一種安全機制,以便使用戶只能通過視圖來訪問數(shù)據(jù),而不給其訪問基表的權限。具體來講,使用視圖有下列優(yōu)點:(1)聚焦特定的數(shù)據(jù)。視圖使用戶只能看到和操縱與他們有關的數(shù)據(jù),不需要了解和使用的數(shù)據(jù)不加入視圖,這樣可以提高數(shù)據(jù)的安全性。(2)簡化數(shù)據(jù)操作。

4、通過將復雜查詢(如多表的連接查詢)定義為視圖,可以簡化操作,不必在每次需要數(shù)據(jù)時都要提供所需的條件、限制等。(3)定制用戶數(shù)據(jù)。視圖可以讓使用同一數(shù)據(jù)庫的不同用戶看到不同的數(shù)據(jù)。(4)導入/導出數(shù)據(jù)??梢允褂靡晥D將數(shù)據(jù)導出到其他應用程序,也可以將數(shù)據(jù)文件中的數(shù)據(jù)導入到視圖中。(5)合并分離的數(shù)據(jù)。使用UNION關鍵字可以將兩個或更多基于不同表的查詢結果合并為一個單獨的結果集,可以將這樣的結果集創(chuàng)建為一個視圖,讓用戶看起來就象一個單獨的表一樣。(6)屏蔽數(shù)據(jù)庫的復雜性(隔離變化)。用戶不必了解復雜的數(shù)據(jù)庫中的表結構,并且數(shù)據(jù)庫表的更改也不影響用戶對數(shù)據(jù)庫的使用。(7)簡化用戶權限的管理。只需授予

5、用戶使用視圖的權限,而不必指定用戶只能使用表的特定列,也增加了安全性。(8)便于數(shù)據(jù)共享。各用戶不必都定義和存儲自己所需的數(shù)據(jù),可共享數(shù)據(jù)庫的數(shù)據(jù),這樣同樣的數(shù)據(jù)只需存儲一次。使用視圖也有其相應的缺點。例如,造成系統(tǒng)性能下降,并且會使用戶對數(shù)據(jù)的修改受到很大限制等。83 創(chuàng)建視圖用戶在數(shù)據(jù)庫中創(chuàng)建了一個或多個表后,為了方便查詢其中的數(shù)據(jù),就可以為其創(chuàng)建相應的視圖,用以代替表來完成從表中查詢、插入、更新和刪除數(shù)據(jù)的操作。創(chuàng)建視圖有兩種方法:使用企業(yè)管理器和使用T-SQL語句。8.3.1 使用企業(yè)管理器創(chuàng)建視圖使用企業(yè)管理器創(chuàng)建視圖的步驟如下:(1)在企業(yè)管理器的樹形目錄中展開服務器組、服務器。(

6、2)展開Supermarket數(shù)據(jù)庫,用鼠標右鍵單擊“視圖”目錄,在彈出的快捷菜單中選擇“新建視圖”選項,打開如圖8-1所示的窗口。圖8-1新建視圖窗口(3)在圖8-1所示窗口的圖表窗格(即最上面的窗格)中單擊鼠標右鍵,在彈出的快捷菜單中選擇“添加表”命令,彈出如圖8-2所示的對話框。圖8-2 添加表(4)此對話框包括三個選項卡,分別顯示了當前數(shù)據(jù)庫的用戶表、用戶視圖和函數(shù)。選定表后單擊“添加”按鈕,可以添加創(chuàng)建視圖的基表,重復此操作可以添加多個基表。添加完畢后單擊“關閉”按鈕。(5)添加完基表,可以如圖8-1所示窗口的圖表窗格中看到新添加的基表以及基表之間的外鍵引用關系,如圖8-3所示。圖8

7、-3 添加Goods表和Supplier表作為基表(6)在圖8-3中,每個基表的每一列的左邊都有一個復選框,選擇該復選框,可以指定該列在視圖中被引用。圖8-3的窗口中第二個窗格是條件窗格,在這個窗格中可以指定查詢條件。條件窗格中顯示了所有在圖表中選中的、要在視圖中引用的列。也可以對每一列選中或取消選中“輸出”復選框,來控制該列是否在視圖中出現(xiàn)。(7)在基表中選中“貨品名稱”列、“存貨量”列、“進貨價格”列、“供應商”列和“負責人”列前面的復選框。如圖8-5所示。(8)圖8-5所示窗口的條件窗格中有“準則”列,它用于輸入對在視圖中出現(xiàn)的列的限制條件,該條件相當于定義視圖的查詢語句中的WHERE子

8、句。例如,在“存貨量”列輸入10,即創(chuàng)建的視圖只包括存貨量大于10的貨品記錄。(9)要在視圖的定義中依照某一列進行分組,可以在圖8-5所示窗口的條件窗格中用鼠標右鍵單擊該列,并在彈出的快捷菜單中選擇“分組”命令。(10)在圖8-5所示窗口的任何地方單擊鼠標右鍵,在彈出的快捷菜單中選擇“屬性”命令,可以打開如圖8-6所示的對話框。圖8-5 選擇視圖出現(xiàn)的列圖8-6 屬性對話框(11)在屬性對話框中,選中“頂端”復選框可以限制視圖最多可以包含多少條記錄,選中“DISTINCT值”復選框可以指定在視圖中不包含相同的記錄,選中“加密瀏覽”復選框可以對視圖定義加密。所有設置進行完畢后,可以在創(chuàng)建視圖的窗

9、口中的第三個窗口中查看視圖查詢條件的T-SQL語句,如圖8-7所示。用戶也可以自己修改該T-SQL語句,修改完成后可以單擊工具欄上的按鈕,檢查該T-SQL語句的語法是否正確。(12)要運行并輸出該視圖的結果,可以單擊鼠標右鍵,在彈出的快捷菜單中選擇“運行”命令,或是在工具欄中單擊按鈕。在窗口的最下面的輸出窗格中將會顯示按照中間的T-SQL語句生成的視圖內容。(13)單擊工具欄上的按鈕,可以保存創(chuàng)建的視圖。視圖創(chuàng)建完成。8.3.2 使用T-SQL語句創(chuàng)建視圖使用T-SQL語句創(chuàng)建視圖的語法格式為:CREATE VIEW view_name (column ,.n)WITH ENCRYPTIONA

10、S select_statement WITH CHECK OPTION圖8-7 查看T-SQL語句其中各選項的含義如下:u view_name:所創(chuàng)建的視圖名。u Column:參數(shù)定義視圖列名,省略該參數(shù)時,視圖中的列名來自源表中列的名稱。如果查詢中包含計算列,那么必須指定列名。u Select_statement:為視圖定義語句,它定義通過視圖可以瀏覽到的表或其他視圖中的哪些數(shù)據(jù),它是SELECT語句。SELECT語句中可以使用多個表及其他視圖,也可以使用UNION關鍵詞合并起來的多個SELECT語句。u WITH ENCRYPTION: SQL Server將創(chuàng)建視圖的Create V

11、iew 語句的文本存儲在Syscomments系統(tǒng)表中,使用WITH ENCRYPTION 選項要求在存儲Create View 語句的文本時對它進行加密,這使得任何人無法使用系統(tǒng)存儲過程SP_HELPTEXT或其他方法從Syscomments系統(tǒng)表中檢索系統(tǒng)定義文本。u WITH CHECK OPTION:強制所有通過視圖修改的數(shù)據(jù)滿足select_ statement語句中指定的條件。當通過視圖修改一條記錄時,WITH CHECK OPTION保證修改的數(shù)據(jù)被提交前仍然可以通過視圖看到。如果不使用該選項,那么當通過視圖添加或修改數(shù)據(jù)記錄時,如果它們不滿足定義視圖的查詢條件(即select_

12、 statement語句中指定的條件),則它們將從視圖中消失。例如,以下代碼在Supermarket數(shù)據(jù)庫中創(chuàng)建視圖view_supermarket,顯示每種貨品的名稱、存貨量、進貨價格、供應商和負責人,并要求對視圖定義文本進行加密存儲:USE SupermarketGOCREATE VIEW view_supermarketWITH ENCRYPTIONASSELECT 貨品名稱,存貨量,進貨價格,供應商,負責人FROM Goods,SupplierWHERE Goods. 供應商號=Supplier.供應商號再如,以下代碼在Sales數(shù)據(jù)庫中創(chuàng)建一個視圖view_sales,其內容為每個貨

13、品的訂單金額總和。USE SalesGOCREATE VIEW view_sales(貨品名稱,金額)WITH ENCRYPTIONASSELECT 貨品名稱,SUM(數(shù)量*單價)FROM OrdersGROUP BY 貨品名稱8.3.3 創(chuàng)建和使用視圖的注意事項學會了創(chuàng)建視圖之后,還需了解一下在其創(chuàng)建和使用過程中要注意的相關事項。一般來講,創(chuàng)建和使用視圖進,需注意下列事項:(1)只有在當前數(shù)據(jù)庫中才能創(chuàng)建視圖。(2)視圖的命名必須遵循標識符命名規(guī)則,不能與表同名,且對每個用戶視圖名必須是惟一的,即多不同用戶,即使定義相同的視圖,也必須使用不同的名字。(3)不能把規(guī)則、默認值定義綁定在視圖之上

14、,不能將觸發(fā)器與視圖相關聯(lián)。(4)不能在視圖上建立任何索引,包括全文索引。(5)一個視圖最多可以引用1024個列。(6)可以將視圖建立在其他視圖或者引用視圖的過程之上,SQL Server 2000中允許最多32層的視圖嵌套。(7)定義視圖的查詢語句中不能包括ORDER BY、COMPUTE、COMPUTE BY子句或是INTO等關鍵詞。(8)不能創(chuàng)建臨時視圖,也不能在臨時視圖是創(chuàng)建視圖。(9)不能對視圖進行全文查詢,盡管基表上可能有全文索引而使用全文查詢。(10)默認狀態(tài)下,視圖中的列繼承它們在基表中的名稱。存在以下情況時,在創(chuàng)建視圖時需要明確給出每一列的名稱:u 視圖中的某些列來自表達式、

15、函數(shù)或常數(shù)。u 視圖中兩個或多個列在不同表中具有相同的名稱。u 希望在視圖中的列使用不同于基表中的列名時。在創(chuàng)建視圖時,并非所有的SELECT子查詢都是合法的,有的SQL語句在這里是禁止使用的,例如:SELECT INTO、COMPUTE或COMPUTE BY子句以及 ORDER BY子句等。除此之外,生成的臨時表也是禁止使用的。但在對視圖進行查詢時,仍可像對表格一樣使用ORDER BY等語句,盡管有這些限制,但視圖中可以包含的內容依然非常豐富。在視圖中可以使用的內容包括:統(tǒng)計函數(shù)、GROUP BY子句、JOIN 子句、DISTINCT子句以及UNION子句等。視圖可以建立在其他視圖的基礎上(

16、最多可以嵌套32層)。84 管理視圖對視圖所進行的管理以通常包括查詢、修改、刪除和更新等操作。一般來講,視圖一經(jīng)定義以后,就可以像表一樣隨時被查詢、修改、刪除或更新。8.4.1 查看視圖的基本信息SQL SERVER允許用戶獲得視圖的一些有關信息,如:視圖的名稱、視圖的所有者、創(chuàng)建的時間等等。視圖的信息存放在以下幾個系統(tǒng)表中:u sysobjects:存放視圖的名稱等信息。u syscolumns:存放視圖中定義的列。u sysdenpends:存放視圖的依賴關系。u syscomments:存放定義視圖的文本。有四種方法可以查看視圖的信息:使用企業(yè)管理器、使用T_SQL語句、使用存儲過程和查

17、詢information_schema .views獲得視圖信息。1、使用企業(yè)管理器使用企業(yè)管理器查看視圖信息的具體操作步驟如下:(1)在企業(yè)管理器的樹形目錄中,展開服務器組、服務器。(2)展開“數(shù)據(jù)庫”,再展開Sales數(shù)據(jù)庫。(3)選中“視圖”目錄,右窗口中就會顯示當前數(shù)據(jù)庫中所有的視圖,以及它們的類型、擁有者和創(chuàng)建時間,如圖8-8所示。圖8-8 查看Sales數(shù)據(jù)庫中的所有視圖2、使用T_SQL語句使用T_SQL語句的SELECT語句也可以查看視圖的基本信息。例如,查看view_sales視圖的基本信息。USE SalesSELECT *FROM sysobjects WHERE xty

18、pe=V and name=view_sales3、使用存儲過程使用存儲過程查看視圖信息的語法格式為:SP_HELP view_name該語句將顯示視圖的名稱、擁有者及創(chuàng)建時間等信息。例如,查看Sales數(shù)據(jù)庫中view_sales視圖的信息。USE SalesGOsp_help view_sales其執(zhí)行結果如圖8-10所示。圖8-10查詢Sales數(shù)據(jù)庫中所有已經(jīng)定義的視圖的基本信息4、查詢information_schema .views獲得視圖信息在查詢分析器中輸入information_schema .views語句,然后單擊“執(zhí)行”按鈕,即可顯示出當前或指定數(shù)據(jù)庫中所有已經(jīng)定義的視

19、圖的基本信息。例如,要查詢Sales數(shù)據(jù)庫中所有已經(jīng)定義的視圖的基本信息,則可以在查詢分析器中輸入以下語句:USE SalesGOinformation_schema .views8.4.2 查看視圖的定義信息1、使用企業(yè)管理器使用企業(yè)管理器查看視圖的定義信息的具體操作步驟如下:(1)在企業(yè)管理器的樹形目錄中,展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫。選中“視圖”目錄,在右窗口的列表中用鼠標右鍵單擊view_sales視圖,在彈出的快捷菜單中選擇“屬性”命令,打開如圖8-10所示的窗口。圖8-10 查看屬性窗口(3)屬性窗口中“文本”框中的文字就是視圖的定義。 2、使用系統(tǒng)存儲過程可用

20、于查看視圖的定義信息的系統(tǒng)存儲過程的語法格式為:SP_HELPTEXT view_name例如,查看Sales數(shù)據(jù)庫中view_sales視圖的定義。USE SalesGOsp_helptext view_sales或:USE SalesEXEC sp_helptext view_sales8.4.3 查看視圖與其他數(shù)據(jù)庫對象之間的依賴關系有時候要查看視圖與其他數(shù)據(jù)庫之間的依賴關系,比如,視圖在哪些表的基礎上創(chuàng)建、又有哪些數(shù)據(jù)庫對象的定義引用了該視圖。查看視圖與其他數(shù)據(jù)庫之間的依賴關系的方法有兩種:1、使用企業(yè)管理器使用企業(yè)管理器查看視圖與其他數(shù)據(jù)庫對象之間的依賴關系的具體操作步驟如下:(1)

21、在企業(yè)管理器的樹形目錄中,展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫,單擊“視圖”目錄,在右窗口中用鼠標右鍵單擊view_sales視圖,在彈出的快捷菜單中選擇“所有任務”|“顯示相關性”命令,打開如圖8-12所示的對話框。(3)該對話框由兩個列表框組成,分別顯示了該視圖所依賴的數(shù)據(jù)庫對象和該視圖的數(shù)據(jù)庫對象。圖8-12 view_sales視圖與其他數(shù)據(jù)庫對象的依賴關系2、使用系統(tǒng)存儲過程 使用系統(tǒng)存儲過程查看視圖與其他數(shù)據(jù)庫對象之間的依賴關系的語法格式如下:SP_DEPENDS view_name例如,查看view_sales視圖與其他數(shù)據(jù)庫對象之間的依賴關系。USE SalesEX

22、EC SP_DEPENDS view_sales查詢結果如圖8-13所示。圖8-13 view_sales視圖與其他數(shù)據(jù)庫對象之間的依賴關系85 視圖的修改和刪除在使用一個視圖的過程中,用戶可以根據(jù)自己的需要,對其定義進行修改。如果一個視圖已經(jīng)沒有用了,也可以將其刪除。8.5.1 視圖的修改修改視圖的定義可用兩種方法,即使用企業(yè)管理器和使用T-SQL的ALTER VIEW語句。1、使用企業(yè)管理器使用企業(yè)管理器修改視圖定義的步驟如下:圖8-14 檢查語法成功(1)在企業(yè)管理器的樹形目錄中,展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫,單擊“視圖”目錄,在右窗口中鼠標右鍵單擊view_sale

23、s,在彈出的快捷菜單中選擇“屬性”命令,彈出如圖8-10所示的窗口。屬性窗口中“文本”框中的文字就是視圖的定義,可以在這里對視圖定義進行修改,修改完畢后,可以單擊“檢查語法”按鈕進行語法檢查。如果語法正確,會彈出如圖8-14所示的對話框,提示檢查成功。2、使用ALTER VIEW語句使用ALTER VIEW語句修改視圖的語法格式為:ALTER VIEW view_name (column ,.n)WITH ENCRYPTIONASselect_statement WITH CHECK OPTION例如,對Supermarket數(shù)據(jù)庫中的view_supermarket視圖進行修改。USE Su

24、permarketGOALTER VIEW view_supermarketWITH ENCRYPTIONASSELECT 貨品名稱,進貨價格,供應商FROM Goods,SupplierWHERE Goods. 供應商號=Supplier.供應商號此外,你還可以刪除原來的視圖,并重新創(chuàng)建它。但此時你必須重新分配權限。8.5.2 視圖的刪除刪除視圖也可用兩種方法,分別為使用企業(yè)管理器和使用T-SQL的DROP VIEW語句。1、使用企業(yè)管理器使用企業(yè)管理器刪除視圖的具體操作步驟如下:(1)在企業(yè)管理器的樹形目錄中,展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫,單擊“視圖”目錄,在右窗口中用

25、鼠標右鍵單擊view_sales視圖,在彈出的快捷菜單中選擇“刪除”命令,彈出如圖8-15所示的對話框,單擊“全部除去”按鈕,刪除此視圖。圖8-15 刪除視圖2、使用DROP VIEW語句使用DROP VIEW語句刪除視圖的語法格式為: DROP VIEW VIEW_NAME,N例如,刪除Supermarket數(shù)據(jù)庫中的view_supermarket視圖。USE SupermarketDROP VIEW view_supermarket86 通過視圖修改基表中的數(shù)據(jù)對視圖可以進行查詢操作,對視圖的查詢實際上仍是在查詢基表是的數(shù)據(jù),因為視圖是不在物理結構上存儲數(shù)據(jù)的。同樣,在SQL SERVE

26、R中,對視圖中的記錄進行插入、修改、刪除等更新操作也是作用在基表上的。對視圖進行插入、修改、刪除的語法與表完全一樣,但有如下以下限制:u 定義視圖的查詢語句中沒有集合函數(shù)(如AVG、SUM、COUNT等),也沒有TOP、DISTINCT、GROUP BY和UNION子句。也即查詢語句的結果集中的列應沒有對基表中的列做修改。u 定義視圖的查詢語句的FROM子句至少要引用一個表。u 在通過視圖更新數(shù)據(jù)之前,不能在一個修改語句中對多個基表進行修改。u 對某些列不能進行修改,如計算列(在2000中可以)。u 在通過視圖修改或插入數(shù)據(jù)時,必須保證修改表中未顯示的列有值(允許為空或有默認值)。u 如果在視

27、圖定義中指定了WITH CHECK OPTION選項,那么要驗證所修改的數(shù)據(jù)。下面離子為在Sales數(shù)據(jù)庫中創(chuàng)建視圖并添加數(shù)據(jù)。首先,在Sales數(shù)據(jù)庫中使用T-SQL語句創(chuàng)建視圖view_sales。USE SalesGOCREATE VIEW view_sales(姓名,公司,職位)ASSELECT 姓名,公司,職位FROM Customers然后,使用T-SQL語句添加數(shù)據(jù)。USE SalesINSERT INTO view_sales(姓名,公司,職位)VALUES(李果,河北詳建商貿(mào)股份有限公司,業(yè)務部經(jīng)理)在查詢分析器中執(zhí)行該語句,返回如下結果:(所影響的行數(shù)為 1 行)該結果說明

28、INSERT操作成功執(zhí)行,該記錄被插入到Customers表中。另外,通過視圖對基表進行刪除時,還要求該視圖的基表只有一個,即視圖定義的FROM子句只引用了一個表。87 用戶定義數(shù)據(jù)類型在設計表時,為每一列指定一個適當?shù)臄?shù)據(jù)類型是很重要的。有時候,SQL Server提供的系統(tǒng)數(shù)據(jù)類型并不能完全滿足需要,所以就需要數(shù)據(jù)庫的實現(xiàn)者自己定義一些數(shù)據(jù)類型。用戶定義數(shù)據(jù)類型并不是真正的數(shù)據(jù)類型,它只提供了一種加強數(shù)據(jù)庫內部元素和基本數(shù)據(jù)類型之間一致性的機制。通過使用這些數(shù)據(jù)類型能夠簡化對常用規(guī)則和默認值的管理。用戶定義數(shù)據(jù)類型并不是數(shù)據(jù)庫對象,有關它的記錄不會列在sysobjects表中。用戶自定義數(shù)

29、據(jù)類型被記錄在systypes表中,但其命名嚴格遵守對象命名規(guī)則。當在幾個列中必須存儲同一種數(shù)據(jù)類型時,并且為了保證這些列有相同的數(shù)據(jù)類型、長度和可空性時,可以使用用戶定義的數(shù)據(jù)類型。用戶定義的數(shù)據(jù)類型可以實現(xiàn)下面的功能:u 利用用戶定義的數(shù)據(jù)類型可以使在不同表中重復出現(xiàn)的各列具有相同的特性、使相似的數(shù)據(jù)種類標準化。u 可以將默認值和規(guī)則綁定到用戶定義的數(shù)據(jù)類型上,那么該規(guī)則和默認值就可以約束使用此數(shù)據(jù)類型的所有列。用戶定義的數(shù)據(jù)類型是在SQL Server的系統(tǒng)數(shù)據(jù)類型的基礎上創(chuàng)建的,比如,可以定義一個基于字符類型的電子郵件地址類型。用戶定義的數(shù)據(jù)類型與系統(tǒng)數(shù)據(jù)一樣,都是用來限制用戶可以輸入

30、的數(shù)據(jù)的種類和長度。它可以用于使用系統(tǒng)數(shù)據(jù)類型的任何地方。如果在model數(shù)據(jù)庫中創(chuàng)建了用戶定義的數(shù)據(jù)類型,則它將出現(xiàn)在所有以后新建的數(shù)據(jù)庫中,但是定義在用戶數(shù)據(jù)庫中的用戶定義數(shù)據(jù)類型,則只會出現(xiàn)在定義它的數(shù)據(jù)庫中。8.7.1 創(chuàng)建用戶定義的數(shù)據(jù)類型創(chuàng)建用戶定義的數(shù)據(jù)類型必須提供三個參數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。創(chuàng)建用戶定義的數(shù)據(jù)類型可以有兩種方法:使用企業(yè)管理器和使用系統(tǒng)存儲過程。1、使用系統(tǒng)存儲過程來定義使用系統(tǒng)存儲過程來定義用戶自定義數(shù)據(jù)類型的語法格式為:sp_addtype type_name,system_type,null_type其中type_na

31、me為用戶定義的數(shù)據(jù)類型名,這個名稱必須在數(shù)據(jù)庫中是惟一的。system_type為用戶定義的數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型,可以包括數(shù)據(jù)的長度、精度等。當系統(tǒng)數(shù)據(jù)類型中包括標點符號時,應用引號括起來。Null_type指定該數(shù)據(jù)類型能否接受空值。其值可以為NULL、NOT NULL或NONULL,其中NULL為默認值。凡是包含了諸如“()”或“,”等分割符的系統(tǒng)數(shù)據(jù)類型,如char(10),必須使用引號括起來,即“char(10)”。例如,在Sales數(shù)據(jù)庫中創(chuàng)建一個用戶定義數(shù)據(jù)類型telephone::USE SalesEXEC sp_addtype telephone, varchar(2

32、0),null在查詢分析器中執(zhí)行該語句,返回如下結果:(所影響的行數(shù)為 1 行)類型已添加。2、使用企業(yè)管理器創(chuàng)建用戶定義的數(shù)據(jù)類型。使用企業(yè)管理器創(chuàng)建用戶定義的數(shù)據(jù)類型的步驟如下:(1)在企業(yè)管理器的樹形目錄中展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫,用鼠標右鍵單擊“用戶定義的數(shù)據(jù)類型” 目錄,在彈出的快捷菜單中選擇“新建用戶定義數(shù)據(jù)類型”命令,或單擊“用戶定義的數(shù)據(jù)類型”,在右窗口中單擊鼠標右鍵,打開如圖8-16所示的對話框。(3)在圖8-16中的“名稱”欄中輸入新建用戶定義數(shù)據(jù)類型的名稱。(4)在“數(shù)據(jù)類型”下拉列表框中選擇用戶定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型。如果選擇的基類型是

33、可以設定長度的(如char),則需要在“長度”欄中設定數(shù)據(jù)類型的長度。(5)如果允許為空,則需要選中“允許NULL值”復選框。(6)如果希望該數(shù)據(jù)類型與規(guī)則或默認值綁定,則分別在“規(guī)則”和“默認值”下拉列表框中選擇要綁定的規(guī)則和默認值,否則選擇“無”。圖8-16 新建用戶定義數(shù)據(jù)類型對話框(7)單擊“確定”按鈕,關閉對話框,完成用戶定義數(shù)據(jù)類型 的創(chuàng)建??梢灾苯邮褂糜脩舳x的數(shù)據(jù)類型來定義表格,但是用戶定義的數(shù)據(jù)類型更常與默認值或規(guī)則等配合使用。8.7.2 查看用戶定義的數(shù)據(jù)類型當不知道如何使用一個用戶自定義數(shù)據(jù)類型時,可以使用企業(yè)管理器和系統(tǒng)存儲過程來查看用戶自定義數(shù)據(jù)類型的信息,包括它基于

34、的系統(tǒng)數(shù)據(jù)類型,它的長度、精度、是否允許為空值,以及在這一數(shù)據(jù)類型上捆綁的規(guī)則和默認值。1、使用企業(yè)管理器圖8-17 查看用戶定義數(shù)據(jù)類型的信息使用企業(yè)管理器查看用戶定義數(shù)據(jù)類型信息的步驟如下:(1)在企業(yè)管理器的樹形目錄中展開服務器組、服務器。(2)展開Sales數(shù)據(jù)庫,單擊“用戶定義的數(shù)據(jù)類型”目錄,在右窗口中,顯示的是此數(shù)據(jù)庫中的用戶自定義數(shù)據(jù)類型。用鼠標右鍵單擊要查看信息的用戶自定義數(shù)據(jù)類型,在彈出的快捷菜單中選擇“屬性”命令,打開如圖8-17所示的對話框。在此對話框中,顯示此用戶自定義數(shù)據(jù)類型的名稱、基于系統(tǒng)的數(shù)據(jù)類型、長度、是否允許為空以及捆綁的規(guī)則和默認值等信息。2、使用系統(tǒng)存儲過程使用系統(tǒng)存儲過程查看用戶定義數(shù)據(jù)類型信息的語法格式為:sp_help type_name例如,查看用戶定義數(shù)據(jù)類型telephone的信息。USE SalesEXEC sp_help telephone8.7.3 重新命名用戶定義的數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論