2

これは、特定の例を含む一般的な質問です。

3 つのフィールド (genreID (PK IDENTITY)、ジャンル、および 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 に答える