2016-10-03 113 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