存储过程错误:外键引用无效表

时间:2018-12-08 15:28:29

标签: sql sql-server

CREATE PROCEDURE spCreateCustomer
AS
BEGIN
    CREATE TABLE Persons
    (
        PersonID INT NOT NULL PRIMARY KEY,
        LastName VARCHAR(255) NOT NULL,
        FirstName VARCHAR(255),
        Age INT
    );
END
GO

EXEC spCreateCustomer
GO

CREATE PROCEDURE spCreateOrder
AS
BEGIN
    CREATE TABLE Orders
    (
        OrderID INT NOT NULL PRIMARY KEY,
        OrderNumber INT NOT NULL,
        PersonID INT,
        CONSTRAINT FK_PersonOrder 
            FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
    ); 
END
GO
EXEC spCreateOrder
GO

错误消息:

  

消息1767,级别16,状态0,过程spCreateOrder,第4行[批处理开始第25行]
  外键“ FK_PersonOrder”引用无效的表“人”

1 个答案:

答案 0 :(得分:2)

就像每个人在评论中所说的那样,不建议在存储过程中创建表。

但是要回答这个问题,您得到的错误是说没有Persons表。这必须意味着在创建Orders表之前,先创建Persons表。因此,您必须在spCreateOrder之前执行spCreateCustomer

如果按照您输入的脚本执行脚本,则不会出现错误,因为表的创建顺序正确。您必须在其他地方以某种不同的顺序执行语句。