案例描述
這是在索引重組過程中遇到的有意思的錯誤案例,搜索了一下也沒有看到相關資料,估計我第一個碰到這類錯誤的人(It's just a joke)。具體情況是YourSQLDba在做維護數據庫索引時遇到了索引重組錯誤,然后我排查時就發現了這個案例。我下面用一個簡單的測試例子演示一下具體情況。
數據庫版本: SQL SERVER 2005
CREATETABLE TEST
(
ID INT,
Name VARCHAR(12)
);
CREATENONCLUSTEREDINDEX "[IDX_NAME]" ON TEST(Name);
因為YourSQLDba生成重組索引語句時,都會在索引名稱上加上[].如果用下面SQL語句進行索引重組,就會遇到這個錯誤
ALTER INDEX [[IDX_NAME]] ON [dbo].[TEST]
Reorganize With (LOB_COMPACTION = On);
消息 102,級別 15,狀態 1,第 1 行
'.' 附近有語法錯誤。
消息 319,級別 15,狀態 1,第 2 行
關鍵字 'with' 附近有語法錯誤。如果此語句是公用表表達式或 xmlnamespaces 子句,那么前一個語句必須以分號結尾。
我們嘗試去掉一對[],此時就會報"找不到索引'IDX_NAME'"的錯誤。其實這個好理解,因為雙引號被解釋為字符串的邊界,所以[IDX_NAME]才是真正的索引名稱,但是如果你重建索引時使用[IDX_NAME], 那么[]就變成了解釋字符邊界的字符,索引名就成了IDX_NAME,顯然就會出現找不到該索引的錯誤提示。
ALTERINDEX [IDX_NAME] ON [dbo].[TEST]
Reorganize With (LOB_COMPACTION = On);
消息 2727,級別 11,狀態 1
新聞熱點
疑難解答