2012-11-06 40 views
1

我修改了一個用來包含Lob列(VarBinary(MAX))的表。從表中刪除LOB列。 Lob使用的頁數不等於0

當我運行

select * from sys.dm_db_partition_stats 
where [object_id] = object_id('MyTable') 

的lob_used_pa​​ge_count是1014969.我認爲這將是0.我錯了或者是有什麼我需要做什麼?

+0

你能解釋一下這個區別嗎?我認爲它有一個聚集索引(因爲PK),但我不確定堆的含義 –

+0

該表只包含幾個int,一個Guid和幾個NVarChar(64) –

回答

0

嘗試ALTER TABLE MyTable REBUILD

似乎要做下面的測試。

CREATE TABLE LobTest 
    (
    PK INT IDENTITY PRIMARY KEY CLUSTERED, 
    A CHAR(7000), 
    B VARCHAR(MAX) 
) 

INSERT INTO LobTest 
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000) UNION ALL 
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000) UNION ALL 
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000) 

ALTER TABLE LobTest 
    DROP COLUMN B 

SELECT * 
FROM sys.dm_db_partition_stats 
WHERE [object_id] = object_id('LobTest') 

ALTER TABLE LobTest REBUILD 

SELECT * 
FROM sys.dm_db_partition_stats 
WHERE [object_id] = object_id('LobTest') 

DROP TABLE LobTest 
+0

不適用於SQL Server 2005 ... –

+0

什麼不行?演示腳本?我將它從使用'VALUES'改爲'UNION ALL',現在它工作嗎? –

+1

@PitMing - 2005我想你需要'ALTER INDEX YourPKName ON MyTable REBUILD' –

0

重建聚集索引。在SQL Server中刪除列時,在重建聚集索引之前,實際上不會刪除它。