3

ストアド プロシージャ内からストアド プロシージャを呼び出すときに、条件ステートメントをめちゃくちゃにしています。誰でも私を助けることができますか?

    CREATE PROCEDURE [dbo].[sp_Leaderboard] 

    @CompetitionId INTEGER

    AS

    DECLARE @Competition TABLE
    (CompId INTEGER,
    CompFormat NVARCHAR(10)
    )
    INSERT INTO @Competition
    SELECT CompetitionId, CompetitionFormatType
    FROM dbo.Competitions 
LEFT JOIN dbo.CompetitionFormat ON dbo.Competitions.CompetitionFormatId = dbo.CompetitionFormat.CompetitionFormatId
    WHERE CompetitionId = @CompetitionId


    CASE WHEN @Competition.CompFormat = "Strokes" THEN EXEC [dbo].[sp_Strokes] ELSE EXEC [dbo].[sp_Stableford]

さらに、コードで対応していないことを知っていることは、どのプロシージャーに行ってもパラメーター @CompetitionId を取得する必要があることです。

4

2 に答える 2

4

IFステートメントを使用しないのはなぜですか?

IF (SELECT TOP 1 CompFormat FROM @Competition) = 'Strokes'
   BEGIN
       EXEC [dbo].[sp_Strokes] @CompetitionId 
   END
ELSE
   BEGIN
       EXEC [dbo].[sp_Stableford] @CompetitionId 
   END
于 2013-02-24T00:06:39.160 に答える
2

必要なことを行うと同時に、テーブル変数を削除できます。これを試して:

DECLARE @CompFormat varchar(50)

SELECT @CompFormat = CompetitionFormatType
FROM dbo.Competitions 
LEFT JOIN dbo.CompetitionFormat 
    ON dbo.Competitions.CompetitionFormatId = dbo.CompetitionFormat.CompetitionFormatId
WHERE CompetitionId = @CompetitionId

IF @CompFormat = 'Strokes'
BEGIN
    EXEC [dbo].[sp_Strokes] @CompetitionId
END
ELSE 
BEGIN
    EXEC [dbo].[sp_Stableford] @CompetitionId
END

@Competition.CompFormatまたは、 をパラメーターとして受け取る新しいストアド プロシージャを作成し、その中で IF ステートメントを使用して、クエリを実行するテーブルを決定する必要があります。

于 2013-02-24T00:07:22.860 に答える