2010-01-04 5 views
0

J'utilise sql server 2000 .J'ai une table avec quatre colonnes ie. col1, col2, col3 et col4. J'ai des enregistrements dans la table. J'ai utilisé la commande dbcc page et j'ai pu voir les valeurs de toutes les colonnes. J'ai ensuite supprimé une colonne, col2, de la table et j'ai refait la page dbcc. Je pouvais voir les valeurs de toutes les colonnes à l'exception de col2 qui a la valeur "Dropped" (La structure d'enregistrement était toujours la même). Je comprends que les informations de colonne sont stockées dans le tableau "syscolumn" Cependant l'enregistrement de col2 n'a pas été trouvé (pour une raison évidente). Je me demande dans quelle table système puis-je trouver les informations que la col2 est supprimée. Où cette information est-elle stockée?identifiant les colonnes supprimées

Merci, Jude

+0

hérite du vidage de l'enregistrement à l'aide de la commande dbcc. 00000000: 10001800 01000000 02000000 03000000 † ............... 00000010: 04000000 05000000 0500e0 ††††††††††††† ...... ..... emplacement 0 0 Colonne Offset 0x4 Longueur 4 Col1 = 1 emplacement 0 Colonne 1 Offset 0x8 Longueur 4 DROPPED = 2 emplacement 0 Colonne 2 Offset 0xc Longueur 4 Col3 = 3 Emplacement 0 Colonne 3 Décalage 0x10 Longueur 4 Col4 = 4 Emplacement 0 Colonne 4 Décalage Longueur 0x14 4 Col5 = 5 ici comme vous pouvez le voir, col2 est marqué comme « chuté » Il pour être un endroit où les informations sont supprimées col2 sont stockées. Merci. – jude

Répondre

0

Je ne peux pas répondre pour 2005, bien que cela puisse vous donner assez d'une indication pour l'année 2000. Les informations ne sont pas disponibles pour autant que je suis au courant par DMV de, pour obtenir l'information vous devez utiliser la console DAC (Dedicated Admin Console). En utilisant la connexion DAC, les colonnes des tables peuvent être trouvées dans sys.sysrowsetsolumns - si vous filtrez cela jusqu'à l'identifiant de ligne individuel/hobtid de l'objet, vous pouvez voir vos colonnes et il y a deux champs à noter, status et rowsetcolid.

En tant que scénario de test, je génère deux fois la valeur de la requête, avant et après la suppression de la colonne.

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

sortie a été

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 

Le test a été la colonne baisse de 3 et vous pouvez voir hobtcolid 3 a modifié le statut à 2 et le rowsetcolid a été mis à 65536. quel est le statut et id signifie I ne peut déduire des actions prises.

Addendum: Ne modifiez aucune donnée dans les tables système via le DAC - très très risqué.

+0

merci pour l'information très utile! J'ai une autre requête.Comment j'identifierais si la colonne supprimée est une colonne de longueur variable comme varchar – jude

+0

Salut andrew, j'ai trouvé cette information dans la table système de syshobtcolumns. Merci pour votre aide! Bravo! – jude

+0

Pouvez-vous s'il vous plaît me dire comment identifier quelle colonne a été supprimée. est toujours hobtcolid = rowsetcolid. – jude

Questions connexes