这是一个带有特定示例的通用问题。
我有一个包含三个字段的表(genreID(PK IDENTITY),类型和subGenre)。该表对(类型,subGenre)组合具有唯一约束。
我想知道如何修改存储过程以在表中不存在时插入,否则返回现有流派的genreID(如果存在)。
CREATE PROCEDURE spInsertGenre
@genreID int OUTPUT,
@genre varchar(100),
@subGenre varchar(100)= NULL
AS
BEGIN
INSERT INTO Genre
(
genre,
subGenre
)
Values (
@genre,
@subGenre
)
SELECT @genreID = SCOPE_IDENTITY()
END
GO
最佳答案
在执行插入操作之前,您可以尝试选择SP将插入的行:
CREATE PROCEDURE spInsertGenre
@genreID int OUTPUT,
@genre varchar(100),
@subGenre varchar(100)= NULL
AS
BEGIN
-- if the row to be inserted already exists, put the genreID into the @genreID output parameter
SELECT @genreID = genreID
FROM Genre
WHERE genre = @genre
AND subGenre = @subGenre
IF @genreID IS NULL -- if the genreID was not found, do an insert and select the new genreID to the @genreID output parameter
BEGIN
INSERT INTO Genre
(
genre,
subGenre
)
Values (
@genre,
@subGenre
)
SELECT @genreID = SCOPE_IDENTITY()
END
END
GO
关于sql - 使用存储过程具有唯一约束的SQL插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18649412/