2015-02-21 2 views
0

Итак, я работаю над SQL, и я продолжаю получать ошибки, и я проверил его тройным образом и до сих пор не пришел к выводу, почему запросы не отображаются правильно. Я использую Microsoft SQL Server. Это ошибки, которые я в настоящее время получать:Microsoft SQL Server

Msg 1767, Level 16, State 0, Line 2
ссылки на внешние ключи 'FK_PatientID' недействителен таблица 'Пациент'.

Msg 1750, Level 16, State 0, Line 2
Не удалось создать ограничение. См. Предыдущие ошибки.

Msg 208, Level 16, State 1, Line 2
Неверное имя объекта 'TreatmentDetails'.

Код:

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'Hospital') 
DROP DATABASE [Hospital] 
GO 

CREATE DATABASE [Hospital] 
GO 

USE Hospital 
GO 

CREATE TABLE [dbo].[Physician] 
(
    PhysicianID INTEGER NOT NULL, 
    FirstName VARCHAR(30) NOT NULL, 
    LastName VARCHAR(30) NOT NULL, 
    Specialty VARCHAR(30) NOT NULL, 
    GraduationDate DATE NOT NULL, 
CONSTRAINT [PK_PhysicianID] PRIMARY KEY (PhysicianID) 
); 
GO 

CREATE TABLE [dbo].[TreatmentDetails] 
(
    TreatmentID INTEGER NOT NULL, 
    PhysicianID INTEGER NOT NULL, 
    PatientID INTEGER NOT NULL, 
    StartDateTime DATE NOT NULL, 
    EndDateTime DATE NULL, 
    Results VARCHAR(30), 
    CONSTRAINT [PK_TreatmentID] PRIMARY KEY (TreatmentID), 
    CONSTRAINT [FK_PhysicianID] FOREIGN KEY (PhysicianID) REFERENCES Physician(PhysicianID), 
    CONSTRAINT [FK_PatientID] FOREIGN KEY (PatientID) REFERENCES Patient(PatientID), 
); 
GO 

CREATE TABLE [dbo].[Patient] 
(
    PatientID INTEGER NOT NULL, 
    FirstName VARCHAR(30) NOT NULL, 
    LastName VARCHAR(30) NOT NULL, 
    DateOfBirth DATE NOT NULL, 
    CONSTRAINT [PK_PatientID] PRIMARY KEY (PatientID), 
); 
GO 

CREATE TABLE [dbo].[AdmissionDate] 
(
    AdmissionID INTEGER NOT NULL, 
    PhysicianID INTEGER NOT NULL, 
    PatientID INTEGER NOT NULL, 
    AdmissionDate DATE NOT NULL, 
    DischargeDate DATE NULL, 
    CONSTRAINT [PK_AdmissionID] PRIMARY KEY (AdmissionID), 
    CONSTRAINT [FK_PhysicianID] FOREIGN KEY (PhysicianID) REFERENCES Physician(PhysicianID), 
    CONSTRAINT [FK_PatientID] FOREIGN KEY (PatientID) REFERENCES Patient(PatientID), 
); 
GO 

INSERT INTO TreatmentDetails VALUES (1, 12345, 1234, '2014-4-5', NULL, 'NOT DONE') 
INSERT INTO TreatmentDetails VALUES (2, 12346, 1235, '2013-5-6', NULL, 'NOT DONE') 
INSERT INTO TreatmentDetails VALUES (3, 12347, 1236, '2012-7-8', '2014-9-10', 'Patient finished') 
INSERT INTO TreatmentDetails VALUES (4, 12348, 1237, '2011-9-10', '2013-11-12', 'Patient finished') 
INSERT INTO TreatmentDetails VALUES (5, 12349, 1238, '2010-11-12', NULL, 'NOT DONE') 

INSERT INTO Physician VALUES (12345, 'Will', 'Smith', 'Surgeon', '2014-5-9'); 
INSERT INTO Physician VALUES (12346, 'Jim', 'Carey', 'Pediatrictian', '2013-2-4'); 
INSERT INTO Physician VALUES (12347, 'Adam', 'Sandler', 'Immunologist', '2012-6-12'); 
INSERT INTO Physician VALUES (12348, 'Seth', 'Rogan', 'Neurologist', '2010-9-19'); 
INSERT INTO Physician VALUES (12349, 'James', 'Bond', 'Dermatologist', '2011-5-2'); 

INSERT INTO Patient VALUES (1234, 'Christopher', 'Thompson', '1989-7-9'); 
INSERT INTO Patient VALUES (1235, 'Mac', 'Miller', '1970-9-5'); 
INSERT INTO Patient VALUES (1236, 'Abraham', 'Lincoln', '1988-1-22'); 
INSERT INTO Patient VALUES (1237, 'George', 'Washington', '1965-2-8'); 
INSERT INTO Patient VALUES (1238, 'Franklin', 'Roosevelt', '1992-5-19'); 

INSERT INTO AdmissionDate VALUES (001, 12345, 1234,'2014-2-9', NULL); 
INSERT INTO AdmissionDate VALUES (002, 12346, 1235, '2014-12-8', '2014-15-9'); 
INSERT INTO AdmissionDate VALUES (003, 12347, 1236,'2014-3-7', '2014-4-9'); 
INSERT INTO AdmissionDate VALUES (004, 12348, 1237, '2014-8-6', NULL); 
INSERT INTO AdmissionDate VALUES (005, 12349, 1238, '2014-5-5', NULL); 



GO 

USE Hospital 

SELECT * FROM Physician 

SELECT * FROM Patient 

SELECT * FROM AdmissionDate 

SELECT * FROM TreatmentDetails 

SELECT Patient.PatientID, Patient.FirstName, Patient.LastName, Patient.DateOfBirth, AdmissionDate.AdmissionDate, AdmissionDate.DischargeDate, Physician.Specialty 
FROM Patient, AdmissionDate, Physician 
WHERE AdmissionDate IS NOT NULL 
ORDER BY Patient.LastName, Patient.FirstName, AdmissionDate.AdmissionDate 

SELECT Physician.PhysicianID, Physician.FirstName, Physician.LastName, Patient.PatientID, Patient.FirstName, Patient.LastName, TreatmentDetails.TreatmentID, TreatmentDetails.StartDateTime, TreatmentDetails.EndDateTime, TreatmentDetails.Results 
FROM Physician, Patient, TreatmentDetails 
WHERE TreatmentDetails.EndDateTime IS NULL 
ORDER BY TreatmentDetails.StartDateTime, Physician.LastName, Patient.LastName 

SELECT Physician.PhysicianID, Physician.FirstName, Physician.LastName, Patient.PatientID, Patient.FirstName, Patient.LastName, TreatmentDetails.TreatmentID, TreatmentDetails.StartDateTime, TreatmentDetails.EndDateTime, TreatmentDetails.Results 
FROM Physician, Patient, TreatmentDetails 
WHERE TreatmentDetails.EndDateTime IS NOT NULL 
ORDER BY TreatmentDetails.StartDateTime, Physician.LastName, Patient.LastName 
+0

Из вашего 'TreatmentDetails' таблицы, вы пытаетесь создать внешний ключ к' Patient' таблице - который ** не был создан еще * * с этой точки зрения! Вам нужно создать свою таблицу в правильном порядке ** для всех этих ограничений внешнего ключа, чтобы найти все остальные таблицы, которые они ссылаются! –

+0

Спасибо @marc_s, что звучит правильно – DarkBlue

ответ

1
  1. Вы имеете неправильный порядок создания таблиц.
  2. Вы создаете внешние ключи с одинаковым именем в разных таблицах.
  3. Вы вставляете данные в таблицы в неправильном порядке.
  4. Вы указали неверный формат даты. Формат по умолчанию: YYYY-MM-DD и вы предоставляете INSERT INTO AdmissionDate VALUES (002, 12346, 1235, '2014-12-8', '2014-15-9');2014-15-9 Это должно измениться.

Здесь работает скрипт:

USE master 

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'Hospital') 
DROP DATABASE [Hospital] 
GO 

CREATE DATABASE [Hospital] 
GO 

USE Hospital 
GO 

CREATE TABLE [dbo].[Physician] 
(
    PhysicianID INTEGER NOT NULL, 
    FirstName VARCHAR(30) NOT NULL, 
    LastName VARCHAR(30) NOT NULL, 
    Specialty VARCHAR(30) NOT NULL, 
    GraduationDate DATE NOT NULL, 
CONSTRAINT [PK_PhysicianID] PRIMARY KEY (PhysicianID) 
); 
GO 

CREATE TABLE [dbo].[Patient] 
(
    PatientID INTEGER NOT NULL, 
    FirstName VARCHAR(30) NOT NULL, 
    LastName VARCHAR(30) NOT NULL, 
    DateOfBirth DATE NOT NULL, 
    CONSTRAINT [PK_PatientID] PRIMARY KEY (PatientID), 
); 
GO 

CREATE TABLE [dbo].[TreatmentDetails] 
(
    TreatmentID INTEGER NOT NULL, 
    PhysicianID INTEGER NOT NULL, 
    PatientID INTEGER NOT NULL, 
    StartDateTime DATE NOT NULL, 
    EndDateTime DATE NULL, 
    Results VARCHAR(30), 
    CONSTRAINT [PK_TreatmentDetails_TreatmentID] PRIMARY KEY (TreatmentID), 
    CONSTRAINT [FK_TreatmentDetails_PhysicianID] FOREIGN KEY (PhysicianID) REFERENCES Physician(PhysicianID), 
    CONSTRAINT [FK_TreatmentDetails_PatientID] FOREIGN KEY (PatientID) REFERENCES Patient(PatientID), 
); 
GO 

CREATE TABLE [dbo].[AdmissionDate] 
(
    AdmissionID INTEGER NOT NULL, 
    PhysicianID INTEGER NOT NULL, 
    PatientID INTEGER NOT NULL, 
    AdmissionDate DATE NOT NULL, 
    DischargeDate DATE NULL, 
    CONSTRAINT [PK_AdmissionDate_AdmissionID] PRIMARY KEY (AdmissionID), 
    CONSTRAINT [FK_AdmissionDate_PhysicianID] FOREIGN KEY (PhysicianID) REFERENCES Physician(PhysicianID), 
    CONSTRAINT [FK_AdmissionDate_PatientID] FOREIGN KEY (PatientID) REFERENCES Patient(PatientID), 
); 
GO 

INSERT INTO Physician VALUES (12345, 'Will', 'Smith', 'Surgeon', '2014-5-9'); 
INSERT INTO Physician VALUES (12346, 'Jim', 'Carey', 'Pediatrictian', '2013-2-4'); 
INSERT INTO Physician VALUES (12347, 'Adam', 'Sandler', 'Immunologist', '2012-6-12'); 
INSERT INTO Physician VALUES (12348, 'Seth', 'Rogan', 'Neurologist', '2010-9-19'); 
INSERT INTO Physician VALUES (12349, 'James', 'Bond', 'Dermatologist', '2011-5-2'); 

INSERT INTO Patient VALUES (1234, 'Christopher', 'Thompson', '1989-7-9'); 
INSERT INTO Patient VALUES (1235, 'Mac', 'Miller', '1970-9-5'); 
INSERT INTO Patient VALUES (1236, 'Abraham', 'Lincoln', '1988-1-22'); 
INSERT INTO Patient VALUES (1237, 'George', 'Washington', '1965-2-8'); 
INSERT INTO Patient VALUES (1238, 'Franklin', 'Roosevelt', '1992-5-19'); 

INSERT INTO TreatmentDetails VALUES (1, 12345, 1234, '2014-4-5', NULL, 'NOT DONE') 
INSERT INTO TreatmentDetails VALUES (2, 12346, 1235, '2013-5-6', NULL, 'NOT DONE') 
INSERT INTO TreatmentDetails VALUES (3, 12347, 1236, '2012-7-8', '2014-9-10', 'Patient finished') 
INSERT INTO TreatmentDetails VALUES (4, 12348, 1237, '2011-9-10', '2013-11-12', 'Patient finished') 
INSERT INTO TreatmentDetails VALUES (5, 12349, 1238, '2010-11-12', NULL, 'NOT DONE') 

INSERT INTO AdmissionDate VALUES (001, 12345, 1234,'2014-2-9', NULL); 
INSERT INTO AdmissionDate VALUES (002, 12346, 1235, '2014-12-8', '2014-9-15'); 
INSERT INTO AdmissionDate VALUES (003, 12347, 1236,'2014-3-7', '2014-4-9'); 
INSERT INTO AdmissionDate VALUES (004, 12348, 1237, '2014-8-6', NULL); 
INSERT INTO AdmissionDate VALUES (005, 12349, 1238, '2014-5-5', NULL); 



GO 

USE Hospital 

SELECT * FROM Physician 

SELECT * FROM Patient 

SELECT * FROM AdmissionDate 

SELECT * FROM TreatmentDetails 

SELECT Patient.PatientID, Patient.FirstName, Patient.LastName, Patient.DateOfBirth, AdmissionDate.AdmissionDate, AdmissionDate.DischargeDate, Physician.Specialty 
FROM Patient, AdmissionDate, Physician 
WHERE AdmissionDate IS NOT NULL 
ORDER BY Patient.LastName, Patient.FirstName, AdmissionDate.AdmissionDate 

SELECT Physician.PhysicianID, Physician.FirstName, Physician.LastName, Patient.PatientID, Patient.FirstName, Patient.LastName, TreatmentDetails.TreatmentID, TreatmentDetails.StartDateTime, TreatmentDetails.EndDateTime, TreatmentDetails.Results 
FROM Physician, Patient, TreatmentDetails 
WHERE TreatmentDetails.EndDateTime IS NULL 
ORDER BY TreatmentDetails.StartDateTime, Physician.LastName, Patient.LastName 

SELECT Physician.PhysicianID, Physician.FirstName, Physician.LastName, Patient.PatientID, Patient.FirstName, Patient.LastName, TreatmentDetails.TreatmentID, TreatmentDetails.StartDateTime, TreatmentDetails.EndDateTime, TreatmentDetails.Results 
FROM Physician, Patient, TreatmentDetails 
WHERE TreatmentDetails.EndDateTime IS NOT NULL 
ORDER BY TreatmentDetails.StartDateTime, Physician.LastName, Patient.LastName 
Смежные вопросы