2

这是一个带有特定示例的通用问题。

我有一个包含三个字段(genreID (PK IDENTITY)、genre 和 subGenre)的表。该表对(流派,子流派)组合具有唯一约束。

我想知道如果存储过程在表中不存在,我该如何去修改要插入的存储过程,否则如果存在,则返回现有流派的流派ID。

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
4

1 回答 1

5

您可以尝试在插入之前选择您的 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
于 2013-09-06T03:38:55.993 回答