0

Le tableau A contient les colonnes 1 et 2. La valeur de la colonne 1 doit être unique si la colonne 2 est égale à x.SQI Contrainte UNIQUE basé sur une autre valeur de colonne

ALTER TABLE A 
ADD UNIQUE (1) WHERE 2 = x. 

Mais cela me donne une erreur de syntaxe près de WHERE.

J'ai essayé de créer un index, mais je n'arrive pas à comprendre comment faire ce que je veux non plus.

Répondre

3
Create unique nonclustered index [my_index] 
on [TableA]([1]) 
where [2] = x 
+1

+1 - bien meilleure solution - il suffit d'ajouter des guillemets simples autour de la x I pense. – sgeddes

+0

oups. Je crois que vous avez raison au sujet des guillemets simples. Bonne prise – jfin3204

+0

Merci! J'essayais de créer un index en utilisant le concepteur et ne pouvais pas comprendre comment. C'est beaucoup plus facile! – Shawn

0

est ici une solution de rechange à l'aide d'une fonction bien que l'indice est une meilleure solution:

CREATE FUNCTION dbo.CheckConstraint 
(
    @col1 int, 
    @col2 CHAR(1) 
) 
RETURNS INT 
AS 
BEGIN 

    DECLARE @ret INT 
    SELECT @ret = COUNT(*) 
    FROM YourTable 
    WHERE col1 = @col1 AND @col2 = 'X' 
    RETURN @ret 

END; 

CREATE TABLE YourTable (col1 int, col2 char(1)); 

ALTER TABLE YourTable 
    ADD CONSTRAINT CheckForXConstraint CHECK (NOT (dbo.CheckConstraint(col1,col2) > 1)); 

INSERT INTO YourTable VALUES (1, 'X'); 
INSERT INTO YourTable VALUES (2, 'X'); 
INSERT INTO YourTable VALUES (2, 'Y'); 
INSERT INTO YourTable VALUES (2, 'X'); <-- This line fails 

SQL Fiddle Demo

Questions connexes