﻿# DBCC CHECKTABLE 無法檢查表格名稱中有小數點的情況

在我們代管眾多客戶的 SQL Server 資料庫中其中有個客戶的資料庫非常特殊，他們的資料表命名都會有小數點在內，例如：**\[dbo\].\[Order.Profile\]**，至於為什麼這樣命名已經不可考 (我猜是為了讓表格在 Management Studio 裡排序的比較整齊吧?!)，這樣的設計在開發上的確沒有什麼問題，只要適切的加上中括弧 ( **\[xxxx\]** ) 即可，但是在管理面來說，就不是那樣可愛了，像我昨天為了要執行 [DBCC CHECKTABLE](http://technet.microsoft.com/zh-tw/library/ms174338.aspx) 來檢查資料表時就試了好久無法成功，直到詢問微軟技術支援中心才得到解答。

我嘗試使用以下語法執行，**失敗！** ( 備註：使用以下語對於沒有小數點的表格名稱是可以正常執行的)

```
DBCC CHECKTABLE ([Order.Profile], REPAIR_REBUILD);
```

   ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/309336bba8b8cafe6ce2-image_551.png)

嘗試使用以下語法執行，**失敗！**

```
DBCC CHECKTABLE (dbo.[Order.Profile], REPAIR_REBUILD);
```

   ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b2873053eab6c7b67f65-image_552.png)

試到明明知道會失敗還在試，**失敗中的失敗！**    
( **註**：人在身處絕境的時候總是不理性的，寫程式除錯到不知道問題在哪裡也是會這樣的 XDDD )

```
DBCC CHECKTABLE (Order.Profile, REPAIR_REBUILD);
```

   ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b2873053eab6c7b67f65-image_552.png)

上述第一種方法是我參考以前曾經記錄的筆記而來的，感覺沒什麼不對，但卻無法正常執行讓我很懊惱，最後解決的辦法竟然是加上雙引號就解決了，一整個蠢很大～ Orz … 正確的語法如下：

```
DBCC CHECKTABLE ("dbo.[Order.Profile]", REPAIR_REBUILD);
```

如此微小的細節，要是我有認真看完 TechNet 的線上文件就好了：[DBCC CHECKTABLE (T-SQL)](http://technet.microsoft.com/en-us/library/ms174338.aspx) ，因為線上文件的範例都是有加上雙引號的！

以下是執行 [DBCC CHECKTABLE](http://technet.microsoft.com/zh-tw/library/ms174338.aspx) 的完整語法供參考：

```sql
USE master
GO

-- 將資料庫設為 SINGLE_USER 模式
ALTER DATABASE [DBNAME]  
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;  
GO 

-- 執行 DBCC CHECKTABLE 搭配使用 REPAIR_REBUILD 參數
USE [DBNAME] 
GO
DBCC CHECKTABLE ("dbo.[Order.Profile]", REPAIR_REBUILD);
GO

-- 將資料庫切為 MULTI_USER 模式
ALTER DATABASE [DBNAME]  
SET MULTI_USER;  
GO
```

**心得分享**

這個故事告訴我們，不要太過相信自己過往的經驗，有時後之前可以成功執行只是因為運氣好，沒釐清真相前這輩子總有再遇到相同問題的一天，所以這問題再蠢我也要寫出來提醒自己一下。 ^\_\_^

**相關連結**

-   [DBCC CHECKTABLE (Transact-SQL)](http://technet.microsoft.com/zh-tw/library/ms174338.aspx) \[ TechNet \]
-   [DBCC CHECKTABLE (Transact-SQL)](http://msdn.microsoft.com/zh-tw/library/ms174338.aspx) \[ MSDN \]
-   [INF：有修復選項的 DBCC CHECKDB/CHECKTABLE 要求資料庫必須為「單一使用者模式」](http://support.microsoft.com/kb/264154/zh-tw)
-   [MSSQLSERVER\_2501](http://msdn.microsoft.com/en-us/library/bb326468.aspx) \[ [中文版](http://msdn.microsoft.com/zh-tw/library/bb326468.aspx) \]
-   [DBCC CHECKDB Introduction and Explanation – DBCC CHECKDB Errors Solution](http://blog.sqlauthority.com/2007/11/13/sql-server-dbcc-checkdb-introduction-and-explanation-dbcc-checkdb-errors-solution/)
-   [DBCC (Transact-SQL)](http://msdn.microsoft.com/en-us/library/ms188796.aspx)
