从表中删除LOB列。 Lob使用的页数不等于0

时间:2012-11-06 15:49:50

标签: sql-server sql-server-2005

我更改了一个用于包含Lob列(VarBinary(MAX))的表。

当我跑步时

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

lob_used_pa​​ge_count是1014969.我认为它会是0.我错了还是有什么我需要做的?

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

重建聚集索引。在SQL Server中删除列时,在重建聚簇索引之前,它实际上不会被物理删除。