2009-03-25 10 views
3

Angenommen, ich habe eine Char-Spalte Typ definiert. Ich will seinen Wert strikt sagen zB (Schwarz, Weiss, Rot, Blau) Nur ...SQLServer: Wie binden Sie feste Werte an Spalte?

Wie kann ich das ??

Alles, was ich weiß, ist dies in Access einfach: P

+0

In Access hilft, Daten korrumpieren mit mehr als einem Benutzer verbunden ist noch einfacher: P –

Antwort

7

Wenn es dann nur wenige zulässigen Werte sind, können Sie ein CHECK constraint verwenden:

ALTER TABLE dbo.Your_Table 
ADD CONSTRAINT CK_YourTable_YourColumn 
    CHECK (Your_Column IN ('Black', 'White', 'Red', 'Blue')) 

Wenn mehr Werte sind, dann können Sie verwenden eine Nachschlagtabelle und ein FOREIGN KEY constraint:

CREATE TABLE dbo.Lookup_Colours (Colour VARCHAR(10)) 
-- then populate Lookup_Colours with all permitted values 

ALTER TABLE dbo.Your_Table 
ADD CONSTRAINT FK_YourTable_YourColumn 
    FOREIGN KEY (Your_Column) 
    REFERENCES dbo.Lookup_Colours (Colour) 
1

Eine Möglichkeit, dies zu tun, wäre eine separate Tabelle "Typ" zu erstellen und Ihre Werte dort zu setzen. Die Tabelle, die den Type varchar verwendet, hätte jetzt eine FK TypeID, die auf die andere Tabelle verweist.

Dies erfordert eine zusätzliche Verknüpfung, aber Sie können steuern, welche Zeichenfolgen Typen sein können.

2

Sie sollten entweder eine Regel verwenden (wie angegeben wurde Regeln sind jetzt veraltet, stattdessen sollten Einschränkungen verwendet werden) oder einen Fremdschlüssel für eine Farbtabelle, die die zulässigen Farben enthält.

Eine Checkeinschränkung kann wie folgt erstellt werden:

ALTER TABLE MyTable 
ADD CONSTRAINT CK_MyTable_ColorType 
    CHECK (ColorType IN ('Black', 'White', 'Red', 'Blue')) 

Wenn Sie mit einem Tisch gehen wollen, dann sollten Sie eine ‚Farbe‘ Tabelle mit dem colorname und eine ID erstellen. Für die Tabelle (n), die die Referenz benötigen, sollten Sie eine Spalte mit dem Fremdschlüssel zur 'Color'-Tabellen-ID hinzufügen.

Um auf die 'Color'-Tabelle zu verweisen, müssen Sie einen Join verwenden, z.

SELECT * 
FROM MyTable INNER JOIN 
     ColorTable ON MyTable.ColorID = ColorTable.ID 

aktualisiert: Mit Constraint statt Regel ältere Datenbanken noch Regeln obwohl (2000) verwenden können.

CREATE RULE Color_Rule 
AS 
@list IN ('Black', 'White', 'Red', 'Blue') 

Hoffe, dass es

+0

Bitte beachten Sie, dass die Regelobjekte sind veraltet. Sie sollten wahrscheinlich stattdessen eine Check-Einschränkung verwenden. Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/ms188064.aspx. – LukeH

+0

Ich werde für die FK gehen, aber wo finde ich die "Create Rule"? Ich kann nur Auslöser erstellen! – Shankarooni