2016-10-03 111 views
0

我嘗試運行該SQL Server查詢:SQL Server的外鍵引用無效表 '僱員'

USE DB_UBB; 

CREATE TABLE dept_emp (
    emp_no  INT   NOT NULL, 
    dept_no  CHAR(4)  NOT NULL, 
    from_date DATE  NOT NULL, 
    to_date  DATE  NOT NULL, 
    FOREIGN KEY (emp_no) REFERENCES employees(emp_no) ON DELETE CASCADE, -- Error here 
    FOREIGN KEY (dept_no) REFERENCES departments(dept_no) ON DELETE CASCADE, -- And here 
    PRIMARY KEY (emp_no, dept_no) 
); 
CREATE INDEX (emp_no); 
CREATE INDEX (dept_no); 

,我得到這些錯誤:

Foreign key 'FK__dept_emp__8bc6840bee39d6cef4bd' references invalid table 'employees'. 

Foreign key 'fk__dept_emp__99bc0b2304d3f32059a9' references invalid table 'departments'. 

即使我有這些表:

Departments

Employees

我該怎麼做?


編輯:

新增全DB:

enter image description here

+0

確定的屏幕截圖是從'DB_UBB'數據庫 –

+0

是。我現在將用整個db進行更新。 –

+0

嘗試與表一起編寫架構。例如,而不是使用員工使用dbo.employees –

回答

0

如果您在列規範後指定的外鍵,請嘗試使用約束條款改爲:

to_date  DATE  NOT NULL, 
CONSTRAINT fk_dept_emp_dept FOREIGN KEY (emp_no) REFERENCES employees(emp_no) ON DELETE CASCADE, 
CONSTRAINT fk_dept_emp_emp FOREIGN KEY (dept_no) REFERENCES departments(dept_no) ON DELETE CASCADE, 
+0

不幸的是,仍然有同樣的錯誤發生。我將嘗試重新啓動我的機器。 –

2

SQL'0123'隱藏Nonclustered索引中的Clustered索引的密鑰列。 您已經創建初級的兩個emp_no,dept_no

簇索引將隱藏指標都列在下面的查詢,並會產生錯誤

CREATE INDEX (emp_no); 
CREATE INDEX (dept_no); 
+0

仍然沒有得到我應該做的。我刪除了創建索引,仍然錯誤。 –

0

Aparently複合主,我即使創建了表,它沒不認識他們。

我增加了一個<if not exist, create tables>

我也去掉了CREATE INDEX (emp_no);CREATE INDEX (dept_no);爲@Muhammad納西爾說,但它並沒有解決的引用問題。

解決方案:

USE DB_UBB; 

IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE name='employees' and xtype='U') 
    CREATE TABLE employees (
     emp_no  INT    NOT NULL, 
     birth_date DATE   NOT NULL, 
     first_name VARCHAR(14)  NOT NULL, 
     last_name VARCHAR(16)  NOT NULL, 
     gender  VARCHAR(1)  NOT NULL CHECK (gender IN('M', 'F')), 
     hire_date DATE   NOT NULL, 
     PRIMARY KEY (emp_no) 
    ); 
GO 

IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE name='departments' and xtype='U') 
    CREATE TABLE departments (
     dept_no  CHAR(4)   NOT NULL, 
     dept_name VARCHAR(40)  NOT NULL, 
     PRIMARY KEY (dept_no), 
     UNIQUE (dept_name) 
    ); 
GO 

IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE name='dept_emp' and xtype='U') 
CREATE TABLE dept_emp (
    emp_no  INT   NOT NULL, 
    dept_no  CHAR(4)  NOT NULL, 
    from_date DATE  NOT NULL, 
    to_date  DATE  NOT NULL, 
    FOREIGN KEY (emp_no) REFERENCES employees(emp_no) ON DELETE CASCADE, 
    FOREIGN KEY (dept_no) REFERENCES departments(dept_no) ON DELETE CASCADE, 
    PRIMARY KEY (emp_no, dept_no) 
); 
GO