2008-11-04 15 views
25

Pracuję nad projektem i chcę przechowywać niektóre łatwo wyliczone informacje w tabeli. Typ danych enum MySql robi dokładnie to, co chcę: http://dev.mysql.com/doc/refman/5.0/en/enum.html. Czy istnieje odpowiednik w SQL Server 2005?Czy SQL Server 2005 ma odpowiednik typu danych ENUM MySql?

wiem mogę przechowywać możliwe wartości w tabeli z kluczem typu, ale raczej nie chciałbym mieć link do niego opisy. Nasze standardy baz danych nie pozwalają nam na łączenie pól niecałkowitych lub unikalnych identyfikatorów, więc zapisywanie możliwych kluczy jako znaków również się kończy.

Odpowiedz

23

to działa dla Ciebie?

Od http://blechie.com/wtilton/archive/2007/08/24/303.aspx

Utwórz tabelę ...

MySQL:

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add') 
    DEFAULT 'open' 

SQL Server:

ColumnName varchar(10) 
    CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
    DEFAULT 'open' 
+0

To działa dla mnie. Pozostaje jeszcze jedna kwestia: czy istnieje łatwy sposób określenia wartości prawidłowych dla wyliczenia bez wyodrębnienia ograniczenia? Rozumiem, że może nie być i będę musiał podjąć decyzję w oparciu o to. –

+0

Nie jestem pewien, co masz na myśli przez "wybranie" ograniczenia, ale możesz być w stanie zawrzeć wyniki tego zapytania systemowego w coś użytecznego dla twoich potrzeb. wybierz definicja z sys.check_constraints gdzie [nazwa] = „yourConstraintName” – Nikki9696

+0

Zarówno ENUM i sprawdź ograniczenia, można wyszukać tabele systemowe i masz ciąg z pełnej składni określające listę wartości. Następnie musisz przeanalizować, aby uzyskać listę w użytecznym formacie. Uciążliwe jest zapytanie do metadanych, tak jakby były danymi. –

17

Jeden Charact Eristic z typem danych ENUM w MySQL polega na tym, że przechowuje on tylko indeks numeryczny na liście wartości, a nie sam napis w każdym wierszu. Zwykle jest to bardziej efektywne pod względem przechowywania. Domyślnym zachowaniem podczas sortowania według kolumny ENUM jest sortowanie według indeksu liczbowego, a więc według kolejności elementów w ENUM.

Nikki9696 sugeruje, stosując kolumnę VARCHAR z Ograniczenie sprawdzające. Spełnia to ograniczenie wartości do pewnej krótkiej listy dozwolonych wartości, ale nie symuluje wydajności przechowywania ani specjalnej kolejności sortowania.

Jednym ze sposobów, aby uzyskać zarówno zachowań jest zadeklarować jako liczba całkowita kolumny klucza obcego w tabeli odnośników, w którym przechowywane są co dozwolone ciąg.

+3

Jeszcze lepsza opcja, niż to, co napisałem, zgadzam się. – Nikki9696

+0

Świetna alternatywa. Dziękuję Ci. – Sung

+0

Jestem zdezorientowany. Czy nie jest to dokładnie to, co autor pytania stwierdza, że ​​nie chce robić (w ostatnim akapicie)? –

Powiązane problemy