Różnica między sysobjects.xtype a sysobjects.type
Są w SQL Server takie obszary, których rzadko się dotyka. Są też takie miejsca, które są dość tajemnicze. Są w końcu takie, których używamy i nawet do końca nie wnikamy, czy używamy ich właściwie. Ważne w tym wszystkim jest to, że jakoś to wszystko działa. Obszarem, który przysparza problemy jest obecność dwóch, prawie identycznych kolumn w tabeli sysobjects. Są to kolumny type oraz xtype.
Przypomnę może dla niewtajemniczonych, że w tabeli sysobjects znajdują się rekordy opisujące każdy obiekt bazy danych, między innymi więzy integralności, wartości domyślne dla kolumn, klucze główne o obce, procedury składowane, wyzwalacze, widoki i inne.
Problemy nastręcza to, że w zdecydowanej większości przypadków wartości w tych kolumnach powtarzają się. Dokumentacja SQL Server też niewiele tutaj pomaga, bo każda z kolumn opisana jest w sposób następujący: Object type., czyli typ obiektu.
Jaka jest zatem różnica?
Różnica jest subtelna i można ją dostrzec tylko w nielicznych przypadkach. Rzeczywiście obie kolumny zawierają typ obiektu. Co więcej, prawdą jest, że w zdecydowanej większości wartości w tych kolumnach zdefiniowane jako char(2) powtarzają się. Różnica pojawia się na dwóch polach. Są to:
- więzy unikalności, czyli UNIQUE CONSTRAINT
- klucz główny, czyli PRIMARY KEY
UNIQUE CONSTRAINT ma w kolumnie type wartość K, natomiast w kolumnie xtype wartość UQ. PRIMARY KEY ma w kolumnie type wartość K, natomiast w kolumnie xtype wartość PK. Jak widać kolumna xtype jest bardziej wyspecjalizowana.
Jak już zostało wcześniej wspomniane, obecnie należy używać tylko i wyłącznie tabeli sys.objects. Problem dwóch kolumn rozwiązuje się sam.
Kategoria:SQL Server
Brak komentarzy - bądź pierwszy