2016-04-17 6 views
0

Verwenden von SQL Server Ich versuche, etwas wirklich einfaches zu tun, aber die Lösung entgeht mir.Wie füge ich logische Operatoren in SQL-Einschränkungen ein?

Meine Datenbank wirft einen Fehler bei der Erstellung. Ich wollte wirklich nur überprüfen, ob die customer.type'Student' ist, dass es dort eine '@' entsprechende customer.email Spalte gibt.

Umgekehrt, wenn die customer.type'Faculty' ist, dass ihre customer.email Spalte endet mit einem '@d.umn.edu'.

Ich habe etwa eine halbe Stunde damit zu tun, und ich kann es dumm nicht funktionieren.

Create table Customer 
    (
     CID int identity(1,1) primary key, 
     F_name char(25), 
     M_name char(25), 
     L_name char(25), 
     type char(7), 
     street varchar(50), 
     city varchar(25), 
     state char(2), 
     zip numeric(5), 
     password varchar(25) not null, 
     email varchar(25) UNIQUE Not null, 

     Constraint CK_Customer_type check (type in ('Student','Faculty')), 
     Constraint CK_Customer_email check((type='Student' AND email like '%@%') OR (type='Faculty' AND email like'%@d.umn.edu'))-- this is throwing an error 
    ) 

INSERT INTO Customer (F_name, M_name, L_name, type, street, city, state, zip, password, email) 
VALUES 
('Jarvis', 'Marvin', 'Vinton', 'Student', '3525 Metz Lane', 'Runnemede St.', 'NJ', 08078, '[email protected]', 'Kohque4Oo'), 
('Olivia', 'Audrey', 'Keele', 'Faculty', '2850 Snowbird Ln.', 'Waco', 'NE', 68460, '[email protected]', 'Blackdiamond26') 

Hinweis: Es muss nicht in einer Einschränkung sein. Danke im Voraus.

+0

Was ist der Fehler? Dies funktionierte in Orakel, nach dem Schließen der Paranthesis am Ende der Aussage. Geschlossen für den Kunden ( –

+0

Arbeitete auch in sqlserver. Versucht in sqlfiddle. Schließen Sie die paranthesis.OR (type = 'Faculty' AND email wie '% @ d.umn.edu'))) –

+0

wenn ich versuche, Daten einzufügen, bekomme ich Folgendes error: Die INSERT-Anweisung steht im Konflikt mit der CHECK-Einschränkung "CK_Customer_email". Der Konflikt ist in der Datenbank "ZZ16AndrewW", Tabelle "dbo.Customer" aufgetreten. Die Anweisung wurde beendet. –

Antwort

1

Ihnen fehlt eine schließende Klammer.

Create table Customer(
     CID int identity(1,1) primary key, 
     F_name char(25), 
     M_name char(25), 
     L_name char(25), 
     type char(7), 
     street varchar(50), 
     city varchar(25), 
     state char(2), 
     zip numeric(5), 
     password varchar(25) not null, 
     email varchar(25) UNIQUE Not null, 
    Constraint CK_Customer_type check (type in ('Student','Faculty')), 
    Constraint CK_Customer_email check((type='Student' AND email like '%@%') OR (type='Faculty' AND email like'%@d.umn.edu'))-- this is throwing an error 
) -- <<-- you are missing the closing parenthesis from create table Customer (

In Ihrer Insert-Anweisung haben Sie das Passwort und die E-Mail-Adresse umgekehrt. Ich tauschte sie in der Liste der Spalten und es funktioniert wie folgt:

INSERT INTO Customer (F_name, M_name, L_name, type, street, city, state, zip, email, password) 
VALUES 
('Jarvis', 'Marvin', 'Vinton', 'Student', '3525 Metz Lane', 'Runnemede St.', 'NJ', 08078, '[email protected]', 'Kohque4Oo'), 
('Olivia', 'Audrey', 'Keele', 'Faculty', '2850 Snowbird Ln.', 'Waco', 'NE', 68460, '[email protected]', 'Blackdiamond26') 

(Betrachten Speicherung von Passwörtern im Klartext zu vermeiden)

+0

Die fehlende Klammer war ein Tippfehler. Es tut uns leid. Es wirft immer noch einen Fehler auf. –

+0

Können Sie ein SQL Fiddle-Beispiel erstellen? Ich habe hier ein funktionierendes Beispiel erstellt: http://sqlfiddle.com/#!3/12b7b – user212514

+0

Ich habe versucht, die MS SQL Server 2014 Option auf SQL Geige zu verwenden. Mein create customer block funktioniert, aber wenn ich versuche, Daten einzufügen, erhalte ich einen Fehler. Ich habe gerade meinen Insert-Block hinzugefügt, der sowohl die Studenten- als auch die Fakultätstypen auf die ursprüngliche Frage testet. danke –

2
  1. Wie wies darauf hin, früher in den Kommentaren und von user212514, Sie hatten verpasste die abschließende Paranthesis.

  2. Zweitens, in Ihren Beilagen ist die E-Mail-ID zuletzt. Gemäß Ihren Werten wird die E-Mail-ID in das Passwortfeld eingegeben und das Passwort wird in das E-Mail-ID-Feld eingegeben.

Ihre Aussagen sollten sein:

INSERT INTO Customer (F_name, M_name, L_name, type, street, city, state, zip, email, password) 
    VALUES 
    ('Jarvis', 'Marvin', 'Vinton', 'Student', '3525 Metz Lane', 'Runnemede St.', 'NJ', 08078, '[email protected]', 'Kohque4Oo') --interchanged email and password. 

INSERT INTO Customer (F_name, M_name, L_name, type, street, city, state, zip, email, password) 
values 
    ('Olivia', 'Audrey', 'Keele', 'Faculty', '2850 Snowbird Ln.', 'Waco', 'NE', 68460, '[email protected]', 'Blackdiamond26') 

Für weitere Informationen: http://www.w3schools.com/sql/sql_insert.asp

Verwandte Themen