识别已删除的列

时间:2010-01-04 11:23:09

标签: sql-server-2005

我正在使用sql server 2000.I有一个包含四列的表,即。 col1,col2,col3和col4。 我在表中有记录。 我使用了dbcc page命令,我可以看到所有列的值。 然后我从表中删除了一列col2,并再次执行了dbcc页面。 我可以看到除col2之外的所有列的值,其值为“Dropped”(记录结构仍然相同)。 我知道列信息存储在“syscolumn”表中 然而,没有找到col2的记录(显而易见的原因)。 我想知道在哪个系统表中可以找到col2被删除的信息。 这些信息存储在哪里?

谢谢, 犹大书

1 个答案:

答案 0 :(得分:0)

我只能回答2005年,虽然这可能会给你足够的指示2000.据我所知,通过DMV的信息不可用,以获取使用专用管理控制台所需的信息(DAC)。

使用DAC连接可以在sys.sysrowsetsolumns中找到表格列 - 如果您将其过滤到对象的各个rowsetid / hobtid,您可以看到列,并且有两个要注意的字段,status和rowsetcolid。 / p>

作为测试用例,我在删除列之前和之后输出两次查询的值。

  select * from sys.sysrowsetcolumns where rowsetid = 72057594038845440
  ALTER TABLE dbo.foo DROP COLUMN test2
  select * from sys.sysrowsetcolumns where rowsetid = 72057594038845440

输出

rowsetid           rowsetcolid hobtcolid status rcmodified maxinrowlen
72057594038845440  1           1           0        0      4
72057594038845440  2           2           0        0      4
72057594038845440  3           3           0        0      4
72057594038845440  4           4           0        0      4

rowsetid           rowsetcolid hobtcolid status rcmodified maxinrowlen
72057594038845440  1           1           0        0      4
72057594038845440  2           2           0        0      4
72057594038845440  4           4           0        0      4
72057594038845440  65536       3           2        0      4

测试正在删除第3列,您可以看到hobtcolid 3已将状态更改为2并且rowsetcolid已设置为65536.状态和ID的含义我只能从所采取的操作中推断出来。

附录:不要通过DAC编辑系统表中的任何数据 - 非常危险。