﻿# 重建資料表時應注意 Management Studio 選項設定是否完整

上星期我們有台 SQL Server 出了一些狀況，有個資料庫其中一個資料表發生了一些問題，主要是發生分頁錯誤的情況，由於資料類型是記錄檔，不是一定需要存在線上，但筆數有三百多萬筆非常佔空間，當確認資料匯出後想要將目前的資料全數刪除，決定先 DROP TABLE 再 CREATE TABLE 比較快，但使用 Management Studio 在做重建表格時必須特別注意選項設定是否正確！

如果你使用 Management Studio 工具來編寫建立表格的指令碼，可以參考下圖的操作：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5e63f0c0c91fa8009280-image.png)

不過一不小心你可能就會遺漏該表格相關連的物件，像是索引、觸發程序之類的，在預設的情況下這兩類的物件是不會被建立的，所以當你重建表格之後，就很有可能也將這些物件給遺漏了！

為了解決此問題，建議各位先將預設的 \[工具\] > \[選項\] 修改一下，讓透過 Management Studio 產生指令碼時能夠產生較完整的 [DDL ( Data Definition Language )](http://en.wikipedia.org/wiki/Data_Definition_Language) 出來，如下圖示：

![\[工具\] > \[選項\]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/091777167735a8215799-image.png "[工具] > [選項]")

在左側先點開 \[SQL Server 物件總管\] > \[指令碼\]，然後將以下兩個選項設定修改為 True 即可：

1.  編寫索引的指令碼
2.  編寫觸發程序的指令碼

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4eccac1ce288994c9f5b-image_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7bb5007991540cf06c50-image.png)

除此之外，還有另一個 \[**產生相依物件的指令碼**\] 設定或許有些時候用的到，當你需要產生一段指令碼能夠除了刪除要刪除的這張主表格外，還要連帶一併刪除其他與此表格相關連的物件，就可以用將此選項設定為 True，但一般來說比較少有機會用到此選項，使用時要小心。

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9192dc4192a5d8829cbe-image_thumb.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/58f4d15db2c1b7545415-image.png)

如果你將 \[**產生相依物件的指令碼**\] 選項設定為 True，而你還試圖使用 Management Studio 來產生 \[**DROP 並 CREATE 至**\] 功能，就會出現以下錯誤訊息：

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/415eb5f9eaef42762754-image_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f03705b660023855904f-image.png)

錯誤訊息是：不支援相依物件的 DROP 和 CREATE。在 \[工具/選項/SQL Server 物件總管/指令碼\] 中，變更 \[產生相依物件的指令碼\] 的設定，或是使用產生指令碼精靈。 

[![不支援相依物件的 DROP 和 CREATE。在 \[工具/選項/SQL Server 物件總管/指令碼\] 中，變更 \[產生相依物件的指令碼\] 的設定，或是使用產生指令碼精靈。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/60b29321cf17da51d99c-image_thumb.png "不支援相依物件的 DROP 和 CREATE。在 [工具/選項/SQL Server 物件總管/指令碼] 中，變更 [產生相依物件的指令碼] 的設定，或是使用產生指令碼精靈。")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8dbac9510f18518ffb8a-image.png)

以上就是一個 SQL 管理實務的小提醒。

**相關連結**

-   [善用 SQL Server Management Studio 選項設定DB作業環境](/post/2009/08/05/SQL-Server-Management-Studio-SSMS-Options-configuration)
-   [Data Definition Language - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Data_Definition_Language)
