2009-07-28 8 views

Répondre

7

Oui - il suffit d'utiliser les contraintes CHECK:

ALTER TABLE myTable 
    ADD CONSTRAINT CK_table_colHasLength CHECK (col1 IS NULL OR col1 <> '') 
0

Si vous définissez une chaîne vide comme celui qui ne contient que des espaces, vous voudrez peut-être envisager d'utiliser la contrainte suivante.

ALTER TABLE myTable ADD CONSTRAINT CK_table_colHasLength CHECK 
(col1 is null or len(col1) != 0) 

Notez que la fonction len() retourne 0 si la chaîne contient uniquement des espaces - quel que soit le nombre qu'il contient.

-1

Ce n'est pas un problème côté DB. Le concepteur Linq-to-SQL dans VS2008 a un bogue de mappage où varchar (1) et nvarchar (1) sont incorrectement mappés à System.Char au lieu de System.String. System.Char n'autorise pas une chaîne vide alors qu'une chaîne vide est une valeur parfaitement valide pour varchar (1) et nvarchar (1). Pour contourner le problème, vous pouvez modifier le mappage dans le concepteur L2S de System.Char à System.String pour les champs affectés.

Voir:
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/e8082fc1-a5be-47bf-9b06-cd1bde19bea0
... et ...
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/ac91e587-6e91-454c-9fa2-bab20b7a258c

+0

Si vous voulez une contrainte sur le système, cette contrainte doit être perpétué partout dans le système, non seulement dans le code. – Rhyous

Questions connexes