2017-01-12 5 views
0

Ich habe Spalte [Typ] in der Tabelle, die Enum Wert enthält (1,2,4,8 - Mix dieser Zahlen). Ich brauche einen eindeutigen Index für 2 Spalten mit Bedingung ((Typ & 8) = 8).Unique Index mit komplizierten Zustand

Ich habe versucht, dies zu tun:

create unique index [name_unique] on [dbo].[Table]([Name],[SecondName],[Type]) WHERE (Type IN (9,10,12)) 

Es funktioniert, aber ich möchte nicht, diesen Index ändern, wenn ich ein beliebiges Feld zu Enum hinzufügen müssen.

+0

Welche RDBMS verwenden Sie, Name und Version? –

+0

Mir ist nicht bekannt, dass SQL Server einen Aufzählungstyp hat. –

+0

SQL Server 2012 –

Antwort

0

Warum nicht bitweise Operatoren verwenden?

create unique index [name_unique] on [dbo].[Table]([Name], [SecondName], [Type]) 
    where ((AxisType & 8) > 0); 
+0

Es ergibt für mich keinen Sinn, dass der Typ in der Feldliste und der Typ in der Bedingung andere Namen haben - fehle ich etwas? – Hogan

+0

@Hogan. . . Dies ist die OP-Logik. Es ergibt Sinn für mich. Basierend auf einem gesetzten Bit möchte das OP, dass drei Spalten in der Tabelle eindeutig sind. Die Tatsache, dass man "Typ" und "AxisType" genannt wird, könnte ein Zufall sein. –

+0

Es war mein Fehler. AxisType ist ein Typ. Ich habe meine Frage korrigiert. (AxisType & 8) = 1 ist nicht funktionieren, weil Sie keine komplizierte Operation in WHERE-Zustand verwenden können –