15. 使用Transact-SQL和Enterprise Manager管理資料表
使用 T-SQL 修改資料表
使用 Enterprise Manager 修改資料表
修改資料表所造成的影響
刪除資料表
本章總結
在 第10章 中,您已經學習了如何透過定義資料行和資料型別來建立資料表。一旦建立了資料表,當然可能進行修改,甚至當資料表中已經存在資料時也可以。本章說明修改資料表的幾種方式,包括修改、新增、刪除和重新命名資料行以及刪除整張資料表等等。建立和修改資料表的條件約束(確保資料完整性的一種方法)與觸發程式(在某種條件下自動執行的一種特殊類型預存程式)將在 第16章 和 第22章 介紹。
在本章中,我們將研究兩種管理資料表的方式:利用Transact-SQL(T-SQL)或是利用Microsoft SQL Server 2000 Enterprise Manager。要注意的是,當您在修改資料表時,T-SQL與Enterprise Manager提供的彈性並不相同。使用Enterprise Manager會比T-SQL更為有利,因為在您執行一些特定的修改時,使用Enterprise Manager會比較簡單。如果您試圖進行一個不當的修改,Enterprise Manager會顯示錯誤訊息或是提供建議。不過,T-SQL能提供一個好處:如果您以指令碼的方式來執行命令,您可以擁有一份追蹤您如何變更資料的記錄。
在正式開始前,我們需要在MyDB資料庫中建立兩張資料表:Bicycle_Sales和Bicycle_Inventory作為本章使用的範例。資料表Bicycle_Sales包含腳踏車銷售商的銷售資訊,其中包括下述各資料行:make_id、model_id、description 、 year 、 sale_id 、 price 、 quantity和sale_date。make_id和model_id兩個資料行被指定為外部索引鍵條件約束,引用Bicycle_Inventory資料表中的make_id和model_id兩個資料行,組成唯一的叢集索引。在 第16章 中將介紹,外部索引鍵條件約束只能引用參考資料表中的一個主鍵資料行或引用其它的唯一約束條件資料行(約束條件將在 第16章 詳細介紹,索引將在 第17章 中介紹)。
sale_id資料行被宣告為Bicycle_Sales資料表的主鍵叢集索引。用於建立這些資料表的CREATE TABLE敘述如下:
USE MyDB
GO
CREATE TABLE Bicycle_Inventory
(
make_name char(10) NOT NULL,
make_id tinyint NOT NULL,
model_name char(12) NOT NULL,
model_id tinyint NOT NULL,
in_stock tinyint NOT NULL,
on_order tinyint NULL,
CONSTRAINT MI_clu_indx
UNIQUE CLUSTERED(make_id, model_id)
)
GO
CREATE TABLE Bicycle_Sales
(
make_id tinyint NOT NULL, --Used in foreign
--key constraint
model_id tinyint NOT NULL, --Also used in foreign
--key constraint
description char(30) NULL,
year char(4) NOT NULL,
sale_id int NOT NULL IDENTITY (1,1) PRIMARY KEY CLUSTERED,
price smallmoney NOT NULL,
quantity tinyint NOT NULL,
sale_date datetime NOT NULL,
CONSTRAINT sales_inventory_fk FOREIGN KEY (make_id, model_id)
REFERENCES Bicycle_Inventory(make_id, model_id)
)
GO
________________________________________
注意
一定要在建立Bicycle_Sales資料表之前建立Bicycle_Inventory資料表。如果要先建立Bicycle_Sales資料表,會顯示一條錯誤訊息。Bicycle_Sales資料表透過條件約束來參考Bicycle_Inventory資料表,所以如果Bicycle_Inventory資料表不存在,就不能建立條件約束,結果將顯示錯誤。
________________________________________
現在我們已經建立了範例資料庫資料表,下面將對它們做幾項修改。首先使用T-SQL,然後使用Enterprise Manager。
使用T-SQL修改資料表
在本節中,您將學習如何使用T-SQL命令修改、新增、刪除和重新命名已經存在的資料表中的資料行。修改資料表的T-SQL命令是 ALTER TABLE 。
修改資料行
一旦建立了資料表,就可以利用ALTER TABLE命令來修改資料行的資料型別、精確度(對於數字類型)和是否允許空值(nullability),並且可新增或刪除資料行的ROWGUIDCOL屬性。透過使用其它T-SQL命令可以進行其它的修改,如新增一個預設值,這些命令將在 第16章 中介紹。
並不是所有的資料行都可以修改。一般而言,下列幾種類型的資料行就不能修改:
• 作為主索引鍵或外部索引鍵條件約束之一部份的資料行
• 用於複寫的資料行(複寫請參閱 第26章 )
• 具有text、ntext、image或timestamp等資料型別的資料行
• 計算資料行或用於計算的資料行
• 一個 ROWGUIDCOL 資料行(不過您可以新增或卸載資料行的ROWGUIDCOL屬性)
• 使用在索引中的資料行
• 用於 CHECK 或 UNIQUE 條件約束的資料行(條件約束在 第16章 中會說明)
• 使用 CREATE STATISTICS 陳述式執行統計時用到的資料行(SQL Server產生的統計資料可以使用ALTER TABLE來刪除。)
• 與預設值相關的資料行
其它所有類型的資料行都可以使用ALTER TABLE陳述式來修改。前面所述的一些例子中,可以先移除限制再進行資料行的修改。例如,可以移除資料行的外部索引鍵或其它條件約束,或是刪除索引,若已沒有其它的限制,則可以修改資料行。
修改資料型別
要修改資料行的資料型別,未經處理資料型別必須轉換為新資料型別。資料型別允許轉換的列表可在線上叢書中的「CAST」 與 「CONVERT」這個主題中找到。要取得這個主題,可在線上叢書中搜尋CAST,然後在 找到的主題 對話方塊裡選擇 CAST與CONVERT 。
修改資料行的資料型別的命令文法如下:
ALTER TABLE <table_name>
ALTER COLUMN <column_name> <new_data_type>
您可以減少每資料列使用的空間,以本章的範例來說,只要將Bicycle_Sales資料表的sale_date資料行的資料型別從datatime改為smalldatetime便可。因為datatime會佔用8個位元組,而smalldatetime只要4個位元組。要進行這個修改,使用下列命令:
ALTER TABLE Bicycle_Sales
ALTER COLUMN sale_date smalldatetime NOT NULL
GO
任何現存的資料表資料將被轉換為新的資料型別smalldatetime。此資料行的 允許NULL 屬性值- NOT NULL 則沒有改變。
要將description資料行的資料型別由char(30) 改為varchar(20) (長度較短),可使用下列命令:
ALTER TABLE Bicycle_Sales
ALTER COLUMN description varchar(20) NULL
GO
要注意的是,現在原始資料型別char(30) 已被修改為新的資料型別varchar(20) ,由於varchar(20) 較短的緣故,如果原先資料列中description資料行裡有長度超過20個字元的值,將在沒有任何警告的情況下被截斷並轉換為varchar(20) 。
________________________________________
說明
當某一資料行中修改後的資料型別比原來的資料型別要短,而現存資料列中的值超過了新型別的長度,將自動截斷為新型行的長度。
________________________________________
修改 是否允許NULL屬性
除了主索引鍵條件約束中的資料行之外,您可以將資料行的 是否允許NULL 屬性由 NOT NULL 改為 NULL 。(主索引鍵條件約束這類資料行在定義上是不允許NULL值的。)您也可以將 NULL 資料行改為 NOT NULL ,不過此資料行中必須沒有NULL值。如果資料行中有NULL值,則需先執行UPDATE陳述式將NULL值變更為其它的值才能將資料行的 是否允許NULL 屬性由 NULL 改為 NOT NULL 。若修改的資料行並未指定其是否允許NULL,則預設是允許NULL值。讓我們來看一些範例。
要將quantity資料行改為允許NULL值,執行下列陳述式:
ALTER TABLE Bicycle_Sales
ALTER COLUMN quantity tinyint NULL
GO
資料行的資料型別tinyint保持不變,只有資料行的 是否允許NULL 屬性有所修改。現在quantity資料行將允許插入NULL值。如果沒有輸入任何值,NULL將自動被插入。這個改變並不影響現存資料列中quantity資料行的值,但往後資料表中新增的資料列裡quantity資料行將可插入NULL。
現在讓我們將description資料行修改成NOT NULL。我們假設此資料行已存在著一些NULL值。因此,我們必須先將NULL值設為其它的值-在本例中,我們將NULL改為None,如此可相容於此資料行的資料型別。要測試NULL值,使用T-SQL關鍵詞 IS NULL 或 IS NOT NULL 會比使用等於運運算元(=)要來得更安全。這是因為NULL是一個未知的值,而一個等於運運算元(=)是否能比對出NULL值,則要看 ANSI nulls 資料庫選項是設為 ON 還是 OFF 。如果設為OFF,則持有空值的運算式(expression=NULL)將傳回TRUE,不為空白值的運算式則傳回FALSE。如果這個選項設為ON,對所有類似的比對expression=NULL將傳回UNKNOWN,且不會傳回任何結果集。您可能已經猜到,當此選項設為ON,SQL Server不會傳回任何NULL值。使用IS NULL與IS NOT NULL關鍵詞可以達成同樣的目的而不必理會ANSI_NULLS的設定。要將description資料行的NULL值改為 None ,可使用UPDATE SET陳述式,如下所示:
UPDATE Bicycle_Sales SET description = "None"
WHERE description IS NULL
GO
接著將descripition資料行改為NOT NULL:
ALTER TABLE Bicycle_Sales
ALTER COLUMN description char(30) NOT NULL
GO
同樣的,我們並沒有變更原始的資料型別char(30) ,只有修改 是否允許NULL 屬性。您可以在單一的ALTER TABLE命令中同時修改資料型別與 是否允許NULL 屬性,如下所示:
ALTER TABLE Bicycle_Sales
ALTER COLUMN description varchar(20) NOT NULL
GO
此陳述式修改了descripition資料行的資料型別與 是否允許NULL 屬性。
新增或卸載ROWGUIDCOL屬性
要對一個資料行新增ROWGUIDCOL屬性或卸載資料行的ROWGUIDCOL屬性,可使用下列文法:
ALTER TABLE <table_name>
ALTER COLUMN <column_name> ADD | DROP ROWGUIDCOL
您只能對資料型別為uniqueidentifier的資料行新增ROWGUIDCOL屬性。假設在我們的Bicycle_Sales資料表中有一個名為unique_id的uniqueidentifier資料行,您可以使用下列命令來新增ROWGUIDCOL屬性:
ALTER TABLE Bicycle_Sales
ALTER COLUMN unique_id ADD ROWGUIDCOL
GO
您可以使用下列命令來卸載ROWGUIDCOL屬性:
ALTER TABLE Bicycle_Sales
ALTER COLUMN unique_id DROP ROWGUIDCOL
GO
新增資料行
您也可以使用ALTER TABLE命令對資料表新增資料行。不論是建立或修改資料表,資料行的定義方式都相當類似。您必須指定資料行的名稱與資料型別,並選擇性的指定其它的特性、屬性以及條件約束。
當您新增一個NOT NULL的資料行,您也必須宣告一個預設值,讓現存的資料列能對新增資料行存入預設值。使用關鍵詞DEFAULT可以指定預設值。要新增資料行,使用下列文法:
ALTER TABLE <table_name>
ADD <column_name> <data_type> <nullability >
DEFAULT default_value
舉例來說,要對Bicycle_Sales資料表新增一個名稱為salesperson_id的資料行,使用下列命令(此新資料行不允許空值且預設值為0):
ALTER TABLE Bicycle_Sales
ADD salesperson_id tinyint NOT NULL
DEFAULT 0
GO
由於資料行被宣告為NOT NULL,資料表中所有現存資料列的新資料行存入預設值 0 。
如果我們新增至資料表的salesperson_id資料行為NULL,則預設值是選擇性的,如下所示:
ALTER TABLE Bicycle_Sales
ADD salesperson_id tinyint NULL
DEFAULT 0 --Optional default value
GO
即使我們指定了預設值,NULL仍會被分配給現存資料列的salesperson_id資料行-只有在往後新插入的資料列裡預設值才會起作用。
要強制現存資料列存入預設值0而不是NULL,可用DEFAULT的WITH VALUES選項,如下所示:
ALTER TABLE Bicycle_Sales
ADD salesperson_id tinyint NULL
DEFAULT 0 WITH VALUES
GO
WITH VALUES指定新的預設值將存入現存資料列的新資料行,而不是NULL。
卸載資料行
您也可以利用ALTER TABLE命令從資料表中卸載資料行。卸載的資料行上所有的資料將從資料表中刪除。不過,下列幾種類型的資料行無法由T-SQL來卸載:
• 用於主索引鍵、外部索引鍵、UNIQE或CHECK條件約束的資料行
• 用於複寫的資料行
• 用於索引的資料行(除非索引已先行卸載)
• 繫結至規則的資料行
• 與預設值相關的資料行
________________________________________
說明
使用Enterprise Manager來卸載資料行時,這些限制仍然適用,但處理方式不同。在本章稍後 〈使用Enterprise Manager修改資料表〉 一節中有詳細的說明。
________________________________________
要從資料表中卸載資料行,使用下列文法:
ALTER TABLE <table_name>
DROP COLUMN <column_name>
下列命令能從Bicycle_Sales資料表中卸載description資料行:
ALTER TABLE Bicycle_Sales
DROP COLUMN description
GO
資料表所有的資料列中description資料行以及其記憶體有的值將被刪除。
________________________________________
注意
當您在卸載資料行時請特別小心。若您沒有備份的資料庫,您將無法還原卸載資料行中的資料。即使交易是發生在備份之後,您也需執行交易記錄檔案來回複資料庫。您也可以重建資料行並存入新的值。
________________________________________
資料行重新命名
要利用T-SQL重新命名資料行,您必須使用下列文法執行sp_rename系統預存程式:
sp_rename 'table.original_column_name', 'new_column_name', 'COLUMN'
例如,要將description資料行重新命名為Bicycle_desc,您可使用下列命令:
sp_rename 'Bicycle_Sales.description', 'bicycle_desc', 'COLUMN'
GO
未經處理資料行名稱必須使用table.column格式,但新的資料行名稱就不需包含資料表名稱。
使用Enterprise Manager修改資料表
就如之前所提到的,使用Enterprise Manager來修改資料表,會比使用T-SQL來得簡單且提供更多的功能與彈性。您可以利用 設計資料表 視窗或是資料庫圖表來完成所有的修改。我們先看一下使用 設計資料表 視窗的方法。要對我們的Bicycle_Sales資料表開啟 設計資料表 視窗,請依下列步驟:
1. 在Enterprise Manager左邊窗格中展開資料庫MyDB的資料夾。
2. 按一下 資料表 可在右邊窗格中顯示MyDB資料庫中所有資料表的清單,15-1。
圖15-1 Enterprise Manager
3. 在右邊窗格中的Bicycle_Sales資料表上按右鈕。從捷徑功能表中選擇 設計資料表 便可開啟 設計資料表 視窗,15-2。此視窗顯示出原始未修改的Bicycle_Sales資料表。
圖15-2 設計資料表視窗
修改資料行
要在 設計資料表 視窗中修改資料行,只要在方格窗格中按一下適當的儲存格或複選框,並進行需要的修改。方格中的每一列代表資料表裡的每一資料行。方格上方的標題代表著每一儲存格設定的屬性。
就某些狀況而言,T-SQL可能無法讓您執行特定的修改並傳回錯誤訊息,但Enterprise Manager卻能提供一些訊息引導您正確地完成修改的程式。舉例來說,如果您試圖利用T-SQL命令ALTER TABLE來修改資料行的資料長度,而此資料行又恰好具有主索引鍵或外部索引鍵約束條件,則SQL Server會傳回類似下列的錯誤訊息:
伺服器: 訊息5074,層級16,狀態4,行1
對象 'sales_inventory_fk' 與 資料行 'make_id' 具相依性。
伺服器: 訊息4922,層級16,狀態1,行1
ALTER TABLE ALTER COLUMN make_id 已經失敗,因為有一個或多個對象存取這個
資料行。
但若我們使用的是Enterprise Manager,則會出現一個允許您修改資料行資料長度的訊息框。
例如,要將資料行make_id(此資料行具有一個參考至Bicycle_Inventory資料表make_id的外部索引鍵約束條件)的資料型別從 tinyint 修改為 smallint ,按一下箭頭顯示資料型別下拉式選單,然後選擇 smallint ,15-3。
圖15-3 使用Enterprise Manager改變資料行的資料型別
由於make_id有一個外部索引鍵約束條件, 需要變更資料型別 對話方塊將會出現,15-4。按一下 是 則兩個資料表的make_id資料行均會自動地由tinyint變更為smallint。
圖15-4 需要變更資料型別 對話方塊
就像T-SQL,當您使用Enterprise Manager修改資料型別時,未經處理資料型別必須被轉換為新的資料型別。若您試圖執行一個不當的轉換,Enterprise Manager將傳回一個類似圖15-5的錯誤訊息。圖15-5顯示出不符合規則的轉換結果,此變更企圖將sale_date資料行的資料型別由datetime改為text。按一下 確定 關閉此錯誤訊息,再選擇一個可進行轉換的資料型別。
圖15-5 試圖將資料型別變更成不可隱含轉換的型別時,隨後顯示的錯誤訊息
要儲存您的變更,按一下 設計資料表 視窗工具列裡的 存檔 按鈕。 儲存 對話方塊隨後確認列出的資料表是否將確實寫入磁碟,15-6所示。按一下 是 確定您要儲存您的變更。
圖15-6 「儲存對話」方塊
新增資料行
要新增資料行,在 設計資料表 視窗中第一個空白列的 資料行名稱 欄位裡按一下,輸入新資料行的資料行名稱,選擇它的資料型別,並將適當的屬性( 是否允許NULL 、 預設值 、 識別 、諸如此類)指派給它。15-7所示,我們新增了一個名為salesperson_id的資料行,資料型別為tinyint,允許NULL,且有一個預設值0。按一下 存檔 按鈕儲存您的變更。SQL Server將對資料表新增一個新資料行。
圖15-7 新增一個名為salesperson_id的資料行
卸載資料行
使用Enterprise Manager卸載或刪除資料行的過程相當簡單。只要在 設計資料表 視窗中,選擇要刪除的資料行的資料行名稱或任一屬性(與資料行名稱同一列的任一儲存格)按右鈕,從捷徑功能表裡選擇 刪除資料行 即可。記得按 存檔 按鈕儲存您的變更。
當您試圖刪除的資料行是約束條件或索引的一部分,或具有預設值,或具有繫結規則時,Enterprise Manager會提出警告。您會看到一個類似圖15-8的訊息框。按一下 是 將刪除資料行以及資料行所有的關聯性。
圖15-8 若您試圖刪除一個與其它資料行或資料表具有關聯性的資料行,將顯示的訊息框
建立與使用資料庫圖表
您也可以利用Enterprise Manager中的資料庫圖表來修改資料表。要建立MyDB中兩個範例資料表Bicycle_Sales與Bicycle_Inventory的資料庫圖表,請依下列步驟:
1. 在Enterprise Manager左邊窗格裡展開MyDB,在 圖表 上按右鈕。從捷徑功能表裡選擇 新增資料庫圖表 將顯示 歡迎使用建立資料庫圖表精靈 畫面,15-9。
圖15-9 歡迎使用建立資料庫圖表精靈畫面
2. 按一下 下一步 顯示 選擇要新增的資料表 畫面,15-10。從 可用的資料表 清單中選擇您要包含在圖表中的資料表,按一下 新增 。在這個例子裡,我們新增Bicycle_Inventory和Bicycle_Sales資料表。
圖15-10 選擇要新增的資料表畫面
3. 按一下 下一步 顯示 完成建立資料庫圖表精靈 畫面。如果您選擇的資料表正確無誤請按一下 完成 ,或按一下 上一步 進行必要的改變。
4. 按一下 完成 後,您可以看到您的資料庫圖表,15-11。
5. 按一下 存檔 按鈕,在提示出現後鍵入名稱以儲存您的資料庫圖表。
在我們的圖表中有一條串連兩個資料表並結束於鑰匙圖案的垂直線,顯示出兩個資料表之間的外部索引鍵約束條件關聯性。要顯示關聯性卷標,在視窗背景中按右鈕並於捷徑功能表裡選擇 顯示關聯性的卷標 。外部索引鍵條件約束的名稱將會顯示出來,15-12。
圖15-11 資料庫圖表範例
圖15-12 顯示資料表關聯性卷標
要選擇資料表,可在資料表上按一下;若要選擇一個以上的資料表,按住Ctrl鍵不放並點選每個資料表。如果您在其中一個資料表上按右鈕並於捷徑功能表中選擇一個選項,所有選擇的資料表都會執行相同的動作。舉例來說,如果我們選擇了資料庫圖表中的兩個資料表,並在其中一個資料表上按右鈕,接著從捷徑功能表裡選擇 資料表檢視 及 標準 ,兩個資料表都會顯示所有資料行屬性,15-13。
圖15-13 從資料庫圖表中顯示資料行屬性
每個資料表顯示資料行屬性的情況不僅類似於 設計資料表 視窗,且可用與 設計資料表 視窗相同的方法來修改。您可在需要的儲存格裡簡單的增加或變更資料行資料,按一下 存檔 按鈕即可儲存您的變更。您也可以在資料庫圖表裡移動或改變資料表可見地區的大小,或讓資料表能有不同的外觀,以及其它的改變。嘗試一下捷徑功能表裡不同的命令。要注意的是,一旦您對某個資料表作了修改,在資料表名稱後面會出現一個星號,用以表示此資料表已被變更。
修改資料表所造成的影響
當您修改資料表時,在您執行T-SQL命令ALTER TABLE之後(或是使用Enterprise Manager並儲存變更之後),會立刻造成現存資料的必然變動。修改進行中時,SQL Server會在資料表上放置一個鎖定以讓其它使用者無法存取此資料表。對大型資料庫而言,如果修改會變動所有現存的資料列,例如增加一個有預設值的NOT NULL資料行或卸載一個資料行,應謹慎進行這個修改-因為這個動作可能要花點時間,即使同時存取的使用者數量很少。當您進行的資料行修改是改變其資料長度、精確度或小數字數,在資料庫中此資料表需要重建,且現存的資料將轉換為新的資料型別。
若在修改進行的期間發生系統故障或致命的錯誤,所有的資料表變更都有記錄且完全可複原。不過一旦您完成整個修改,就只能從備份中還原資料庫並傳回資料表以回複最初的狀態(備份與還原資料庫將在 第32章 與 33章 中說明)。
刪除資料表
當您卸載一個資料表,資料表的定義以及與此資料表關聯之資料、索引、條件約束、觸發程式和許可權都將被刪除。參考刪除資料表的檢視表與預存程式也必須被明確地刪除。如果在其它的資料表中有外部索引鍵條件約束參考至此資料表,則資料表將無法卸載-換言之,如果某一資料表是其它資料表所依存的對象,它是無法被刪除的。除非條件約束或參考的資料表先被刪除,資料表才有卸載的可能。另一方面,一個資料表即使持有外部索引鍵條件約束,但若沒有其它資料表依存它,則仍然可以被卸載。在本節裡,我們將介紹如何利用T-SQL與Enterprise Manager來刪除資料表。
使用T-SQL刪除資料表
刪除資料表的T-SQL命令文法如下:
DROP TABLE <table_name>
使用DROP VIEW或DROP PROCEDURE來刪除參考刪除資料表的檢視表與預存程式。您可在刪除資料表之前或之後刪除這些檢視表或預存程式。一旦資料表被卸載,您將無法擷取它-您必須重建整個資料表、資料及其它所有相關的東西。
要卸載我們的範例資料表Bicycle_Inventory,由於Bicycle_Sales資料表有一外部索引鍵約束條件參考至Bicycle_Inventory,我們必須先把外部索引鍵約束條件sales_inventory_fk卸載,接著才能刪除Bicycle_Inventory資料表,如下所示:
ALTER TABLE Bicycle_Sales
DROP CONSTRAINT sales_inventory_fk
GO
DROP TABLE Bicycle_Inventory
GO
如果您尚未移除外部索引鍵條件約束便試著刪除此資料表,則會傳回一個錯誤訊息,且不會進行任何刪除的動作。
使用Enterprise Manager刪除資料表
Enterprise Manager提供兩種方法來刪除資料表:使用 卸載對象 對話方塊或是使用資料庫圖表。當您要刪除的資料表並不被其它資料表所依存,使用 卸載對象 對話方塊會比較好。要以此方式來刪除資料表,遵循下列步驟:
1. 在Enterprise Manager左邊窗格中展開資料庫(此資料庫包含您打算卸載的資料表),在 資料表 上按一下,然後在右邊窗格中找出您要卸載的資料表,並在資料表名稱上按右鈕。
2. 從捷徑功能表中選擇 刪除 ,顯示 卸載對象 對話方塊,15-14。
圖15-14 「卸載對象」對話方塊
3. 若此資料表有任何依存資料表,按一下 顯示依存的情況 可顯示 依存性 對話方塊,15-15。任何依存於此資料表的資料表將會顯示在對話方塊左邊的清單中。如果此處有任何依存資料表,在這些依存性尚未移除前您將無法刪除此資料表。
4. 如果沒有其它的資料表依存於所選擇的資料表,在 卸載對象 對話方塊中按 卸載全部 即可刪除資料表。
圖15-15 Bicycle_Sales資料表的「依存性」對話方塊
要刪除一個有依存資料表的資料表,我們將使用第二種方法:資料庫圖表。在這個例子裡,我們將移除Bicycle_Inventory資料表,移除的重點在於Bicycle_Sales資料表有一外部索引鍵約束條件參考至資料表。如果我們使用 卸載對象 對話方塊的方式,刪除動作將會失敗。但若我們使用一個顯示出這兩個資料表的資料庫圖表,我們便可以移除Bicycle_Inventory資料表且外部索引鍵約束條件也會被自動地移除。要刪除Bicycle_Inventory資料表,遵循下列步驟:
1. 在Enterprise Manager中展開您要使用的資料庫,按一下 圖表 ,在右邊窗格找出適當的圖表,在圖表名稱上按兩下便可開啟資料庫圖表。選擇您要刪除的資料表名稱-本例為Bicycle_Inventory。
2. 在資料表上任何地方按右鈕,並從捷徑功能表中選擇 從資料庫中刪除資料表 。出現 您確定要從資料庫中永久刪除資料表 的提示時,按一下 是 。資料表與外部索引鍵條件約束會從圖表中被移除。
3. 如果您確定要永久刪除此資料表,按一下 存檔 按鈕儲存您的變更。資料表隨後會從資料庫中被刪除。如果您刪除後卻又改變了心意,只要按一下 關閉 且不儲存變更的情況下離開 編輯圖表 視窗即可。若您隨後又重新開啟資料庫圖表,您會發現原始的資料仍然存在。除非您儲存您的工作,否則任何變更都不會發生作用。
本章總結
在本章裡,您已學到如何利用T-SQL與Enterprise Manager來修改、新增、卸載及重新命名資料行,完成修改資料庫資料表的目的。T-SQL與Enterprise Manager功能性的不同之處也在我們的學習中逐步呈現出來。您也已學習到如何利用 建立資料庫圖表精靈 來建立資料庫圖表,以及如何從資料庫刪除資料表及表中所有的資料。對於資料表,我們還可以進行一些其它的變更,包括修改、新增及卸載條件約束與預設值。這些變更將在 第16章 中介紹。