web-dev-qa-db-fra.com

Équivalent SQL Server au type de données MySQL enum?

SQL Server 2008 a-t-il un type de données tel que enum de MySQL?

120
Patrick

Ce n'est pas. Il y a un vague équivalent:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
140
chaos

La meilleure solution que j'ai trouvée consiste à créer une table de recherche avec les valeurs possibles en tant que clé primaire et à créer une clé étrangère dans la table de recherche.

81
user1431422

IMHO Tables de consultation est la voie à suivre, avec une intégrité référentielle. Mais uniquement si vous évitez les "nombres magiques diaboliques" en suivant un exemple tel que celui-ci: Générer une énumération à partir d'une table de consultation de base de données à l'aide de T4

S'amuser!

3
Jony Adamit

Trouvé cette approche intéressante lorsque je voulais implémenter des enums dans SQL Server.

L'approche mentionnée ci-dessous dans le lien est assez convaincante, car tous les besoins de votre base de données pourraient être satisfaits avec 2 tables centrales.

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

2
user_v
CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 0
END

GO

CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 1
END

-- etc...

Là où la performance compte, utilisez toujours les valeurs absolues.

2
Dimitris Staikos