Sql server 存储过程中的外键约束-SQL Server
我有以下存储过程,这里有两个表,Movie和Director。当创建或添加新电影时,这两个选项都需要更新。如何处理存储过程中的FK?本例中的FK为Sql server 存储过程中的外键约束-SQL Server,sql-server,tsql,Sql Server,Tsql,我有以下存储过程,这里有两个表,Movie和Director。当创建或添加新电影时,这两个选项都需要更新。如何处理存储过程中的FK?本例中的FK为控制器id。它是导演中的主键,但是电影中的FK需要这样指定两次吗?我遇到了冲突错误 CREATE PROCEDURE Book_Book_Creation @Book_id_arg DECIMAL(12), @author_id_arg DECIMAL(12), @type_id_arg DECIMAL(12),
控制器id
。它是导演
中的主键,但是电影
中的FK需要这样指定两次吗?我遇到了冲突错误
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';
基本上,您只需要这样做:
- 首先插入到
表中控制器
- 从该表中获取新插入的ID(假设
列是主键,并且类型为Director\u ID
)INT-IDENTITY
- 然后用新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);
我不明白你为什么要把导演的ID作为参数传入——两次 基本上,您只需执行以下操作:
- 首先插入到
表中控制器
- 从该表中获取新插入的ID(假设
列是主键,并且类型为Director\u ID
)INT-IDENTITY
- 然后用新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);
我不明白你为什么要把导演的ID作为参数传入——两次 试试这个-
ALTER PROCEDURE dbo.Movie_Movie_Creation12
@movie_id_arg DECIMAL(12),
@director_id_arg DECIMAL(12),
@genre_id_arg DECIMAL(12),
@title_arg VARCHAR(64),
@copyright_arg DECIMAL(4),
@director_fname_arg VARCHAR (64),
@director_lname_arg VARCHAR (64)
AS BEGIN
INSERT INTO dbo.Director (Director_id, Director_fname, director_lname)
SELECT @director_id_arg, @director_fname_arg, @director_lname_arg
INSERT INTO dbo.Movie (Movie_id, director_id,genre_id, title, copyright)
SELECT @movie_id_arg, @director_id_arg, @genre_id_arg, @title_arg, @copyright_arg
END
EXECUTE dbo.Movie_Movie_Creation12
@movie_id_arg = 32
, @director_id_arg = 32
, @genre_id_arg = 1
, @title_arg = 'Argo'
, @copyright_arg = 2012
, @director_fname_arg = 'Ben'
, @director_lname_arg = 'Affleck'
试试这个-
ALTER PROCEDURE dbo.Movie_Movie_Creation12
@movie_id_arg DECIMAL(12),
@director_id_arg DECIMAL(12),
@genre_id_arg DECIMAL(12),
@title_arg VARCHAR(64),
@copyright_arg DECIMAL(4),
@director_fname_arg VARCHAR (64),
@director_lname_arg VARCHAR (64)
AS BEGIN
INSERT INTO dbo.Director (Director_id, Director_fname, director_lname)
SELECT @director_id_arg, @director_fname_arg, @director_lname_arg
INSERT INTO dbo.Movie (Movie_id, director_id,genre_id, title, copyright)
SELECT @movie_id_arg, @director_id_arg, @genre_id_arg, @title_arg, @copyright_arg
END
EXECUTE dbo.Movie_Movie_Creation12
@movie_id_arg = 32
, @director_id_arg = 32
, @genre_id_arg = 1
, @title_arg = 'Argo'
, @copyright_arg = 2012
, @director_fname_arg = 'Ben'
, @director_lname_arg = 'Affleck'
在这种情况下,您需要先插入导演,然后通过
SELECT@NewDirectorID=SCOPE\u IDENTITY()
获取新生成的导演,然后使用新导演的ID将值插入电影表。在这种情况下,您需要先插入导演,然后通过SELECT@NewDirectorID=SCOPE\u IDENTITY()获取新生成的导演
然后用新导演的IDI将值插入电影表中。DB对我来说非常陌生,我该如何在我的过程中实现它?我对DB非常陌生,我该如何在我的过程中实现它?