我有以下存储过程,这里有两个表,Movie和Director.在创建或添加新电影时,两者都需要更新.你如何处理存储过程中的FK?在这种情况下,FK是director_id.它是主键,Director但是FK中Movie 我是否需要像这样指定它两次?我遇到了冲突错误
CREATE PROCEDURE Book_Book_Creation
@Book_id_arg DECIMAL(12),
@author_id_arg DECIMAL(12),
@type_id_arg DECIMAL(12),
@title_arg VARCHAR(64), -
@copyright_arg DECIMAL(4),
@dauthor_id_2_arg DECIMAL(12),
@author_fname_arg VARCHAR (64),
@author_lname_arg VARCHAR (64)
AS
BEGIN
INSERT INTO Book(Book_id, author_id,genre_id, title, copyright)
VALUES (@author_arg, @author_id_arg, @type_id_arg, @title_arg, @copyright_arg);
INSERT INTO Author(author_id, author_fname, author_lname)
VALUES (@director_id_2_arg, @director_fname_arg, @director_lname_arg)
END;
EXECUTE Book_Book_Creation 32,32,1,'Tempting',2013,32,'Taylor','Mendez';
Run Code Online (Sandbox Code Playgroud)
基本上,你只需要这样做:
Director表格Director_Id列是您的主键并且是类型INT IDENTITY)Movie使用该新ID 插入表中像这样的东西:
DECLARE @NewDirectorID INT
INSERT INTO Director (Director_id, Director_fname, director_lname)
VALUES (@director_id_2_arg, @director_fname_arg, @director_lname_arg)
SELECT @NewDirectorID = SCOPE_IDENTITY()
INSERT INTO Movie (Movie_id, director_id,genre_id, title, copyright)
VALUES (@movie_id_arg, @NewDirectorID, @genre_id_arg, @title_arg, @copyright_arg);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么你会把导演的ID作为参数传递 - 两次!