2010-01-04 49 views
0

我正在使用sql server 2000。我有一個表,有四列即ie。 col1,col2,col3和col4。 我在表中有記錄。 我使用了dbcc頁面命令,我可以看到所有列的值。 然後我從表中刪除了一列col2,並再次執行了dbcc頁面。 我可以看到除col2之外的所有列值「Dropped」(記錄結構仍然相同)。 我知道列信息存儲在「syscolumn」表中 但是找不到col2的記錄(出於顯而易見的原因)。 我想知道在哪個系統表中可以找到col2被刪除的信息。 這個信息存儲在哪裏?確定刪除的列

感謝, 裘德

+0

heres使用dbcc命令轉儲記錄。 00000000:10001800 01000000 02000000 03000000†................ 00000010:04000000 05000000 0500e0††††††††††††...... ..... 插槽0列0偏移爲0x4長度4 Col1中= 1分 插槽0列1偏移0x8中持續4 DROPPED = 2 插槽0第2列偏移位於0xC長度4 COL3 = 3 插槽0列3偏移量0x10長度4 Col4 = 4 插槽0第4列偏移0x14的長度4 COL5 = 5 在這裏你可以看到,COL2被標記爲「下降」 那裏是那裏是COL2被刪除的信息存儲在一個地方。 謝謝。 – jude 2010-01-04 11:23:40

回答

0

我只能回答,2005年,儘管這可能會給你足夠的指示於2000年的信息不可用,只要我通過DMV的所知,來獲得這些信息您需要使用專用管理控制檯(DAC)。

使用DAC連接可以在sys.sysrowsetsolumns中找到表列 - 如果將其過濾到對象的單個rowsetid/hobtid中,您可以看到列,並且有兩個字段需要註明status和rowsetcolid。

作爲一個測試用例,我在刪除列之前和之後輸出兩次查詢的值。

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在系統表中編輯任何數據 - 非常危險。

+0

感謝您提供非常有用的信息! 我還有一個查詢。我將如何確定刪除的列 是否是一個可變長度列,如varchar – jude 2010-01-13 05:05:09

+0

嗨安德魯,我在syshobtcolumns系統表中找到了這些信息。 感謝您的幫助! 歡呼! – jude 2010-01-13 05:52:23

+0

你能告訴我如何識別哪一列被刪除。 是hobtcolid always = rowsetcolid。 – jude 2010-01-13 15:06:38