2010-11-30 6 views
1

Quelqu'un peut-il me dire pourquoi Sysobjects table ont deux colonnes xtype et type. Les deux sont du type de données char(2) et stocke le type d'objet.xtype vs type colonne dans Sysobjects

+1

Les valeurs de certains types d'ocject diffèrent, par exemple, de la contrainte de clé primaire. –

Répondre

2

Je crois que type devrait être utilisé car il est encore dans la nouvelle vue. xtype est là pour la rétrocompatibilité.

REMARQUE:

Il semble que sys.sysobjects sera removed in future versions et vous devez utiliser sys.objects à la place.

+0

J'utilise SQL Server 2005. Voulez-vous dire la colonne xtype n'était pas là dans SQL 2000. –

+0

@Nadeem - J'ai eu une faute de frappe dans ma réponse originale et ils étaient dans le mauvais sens. 'xtype' existait dans SQL2K. 'type' sera utilisé à l'avenir. – codingbadger

0

Vous pouvez regarder la définition de sysobjects

select OBJECT_DEFINITION(OBJECT_ID('sysobjects')) 
AS [processing-instruction(x)] FOR XML PATH('') 

Ce qui donne

CREATE VIEW sys.sysobjects AS 
SELECT 
/*... Snip ...*/ 
xtype = type collate database_default, 
/*... Snip ...*/ 
type = convert(char(2), case type 
    when 'UQ' then 'K' when 'PK' then 'K' 
    else type collate database_default end), 
/*... Snip ...*/ 
FROM sys.sysschobjs 

Il semble donc qu'ils ne diffèrent que si UQ et PK ou présentée comme K ou non.