15

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章 中介紹。