Kai*_*ran 0 sql sql-server stored-procedures
我正在检查记录是否存在,然后将其插入到表中(并且此方法似乎适用于我已在使用的其他存储过程)但是对于此特定存储过程,即使表为空,也不会插入任何内容, 为什么不?
CREATE PROCEDURE spInsertMovieHasTrailer
@movieID int,
@name varchar(50)
AS
BEGIN
SELECT @name = name, @movieID = movieID
FROM MovieHasTrailer
WHERE name = @name and movieID = @movieID
IF @name IS NULL and @movieID IS NULL
BEGIN
INSERT INTO MovieHasTrailer
(
movieID,
name
)
Values (
@movieID,
@name
)
END
END
Run Code Online (Sandbox Code Playgroud)
执行如下:
execute spInsertMovieHasTrailer 1, 'Test'
Run Code Online (Sandbox Code Playgroud)
我会将它直接构建到insert而不是使用if逻辑. if介绍竞争条件:
INSERT INTO MovieHasTrailer
SELECT movieID, name
FROM (SELECT @movieID as movieID, @name as name) t
WHERE NOT EXISTS (SELECT 1
FROM MovieHasTrailer mht
WHERE mht.MovieId = t.MovieID AND mht.name = t.name
);
Run Code Online (Sandbox Code Playgroud)
请注意,这假设您需要id和名称来匹配电影.我认为id这就足够了.
另外,我真正要做的是在MovieHasTrailer(MovieId)或两者上都有一个独特的索引MovieHasTrailer(MovieId, Name).如果存在插入错误,请使用try/ catchblock.