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”引用无效的表“人”
答案 0 :(得分:2)
就像每个人在评论中所说的那样,不建议在存储过程中创建表。
但是要回答这个问题,您得到的错误是说没有Persons
表。这必须意味着在创建Orders
表之前,先创建Persons
表。因此,您必须在spCreateOrder
之前执行spCreateCustomer
。
如果按照您输入的脚本执行脚本,则不会出现错误,因为表的创建顺序正确。您必须在其他地方以某种不同的顺序执行语句。