2009-11-11 5 views
2

Je souhaite limiter une colonne décimale SQL Server pour autoriser uniquement les valeurs valides -1,0,1.SQL Server ajoute une contrainte de colonne pour limiter les données à -1 à 1

Pouvez-vous me montrer la syntaxe SQL pour ajouter une telle contrainte. (Je voudrais savoir comment le faire dans l'instruction CREATE TABLE et/ou dans la commande ALTER TABLE ADD CONSTRAINT).

Ou est-ce que cela peut seulement être accompli dans un déclencheur?

+0

Ceci peut être accompli par un déclencheur, mais c'est la dure. gbn vous a donné la solution. – Jonathan

+0

si vous souhaitez accepter toutes les valeurs possibles entre -1 et +1, vous pouvez créer une contrainte 'CHECK (bar BETWEEN -1.0 AND 1.0)' –

Répondre

21
CREATE TABLE foo (
    bar int NOT NULL CONSTRAINT CK_foo_bar CHECK (bar IN (-1, 0, 1)) 
) 

ou

ALTER TABLE foo WITH CHECK ADD --added WITH CHECK 
    CONSTRAINT CK_foo_bar CHECK (bar IN (-1, 0, 1)) --not needed "FOR bar" 

Edit: pensées ...

  • pourquoi contraindre une décimale? Pouvez-vous le changer en smallint ou en int?
  • qu'en est-il des NULL? Vous devrez peut-être changer mon code autour de faire exactement ce que vous voulez
+1

peut-être utile pour les moteurs de recherche MySQL: "La clause CHECK est analysée mais ignorée par tous les moteurs de stockage. " de la documentation MySQL, et oui c'est vraiment ignoré –

4
create table (
    x integer check (x = -1 or x = 0 or x = 1), 
    y integer 
); 


insert test values(5,5) 
insert test values(-1, 5) 
insert test values(0, 5) 
insert test values(1, 5) 

alter table test with nocheck add check(y = -1 or y = 0 or y = 1); 
-- with no check prevents errors for illegal values already in the table 
insert test values(-1, 1) 
insert test values(0, -1) 
insert test values(1, 0) 

select * from test 
Questions connexes