0

ストアド プロシージャを作成しています。テーブル「エントリ」をクエリします。proc には、int である @ID と bit である @APPROVED というパラメーターがあります。SQL Server 2005 を使用しています

承認済みが偽の場合、真の場合とは異なることをしたいと思います。以下の書き込みがあります。作成しようとすると、「キーワード「END」付近の構文が正しくありません。」というメッセージが表示されます。

エラーが消えた場合にネストを削除すると、私が読んだことから、これは完全に有効な構文です。誰かが私が間違っているところを教えてもらえますか?

CREATE Procedure [dbo].[GetEntry](@ID int,@APPROVED bit)
AS
IF @APPROVED = 0
BEGIN 
    --see if the unapproved entry has already been viewed 
    IF (SELECT COUNT(*) 
    FROM [dbo].[Entries]
    WHERE EntryId = @ID AND Approved = @APPROVED AND Viewed = 0) > 0
    BEGIN

    END

END

どんな助けでも本当に感謝しています。ありがとう!

4

2 に答える 2

1

内部で何かを行う必要がBEGIN/ENDあり、はるかに効率的なチェックはEXISTS、カウントを手動で取得することです (クラスター化されたインデックス全体をスキャンする必要があります)。結果が 2 か 5 か 27,654 かはあまり気にしませんよね?

IF EXISTS (SELECT 1 FROM dbo.Entries WHERE ...)
BEGIN
    PRINT 'It exists!';
END
于 2012-09-19T17:43:29.863 に答える
1

で何かを行う必要BEGIN/ENDがあります。空にすることはできません:

CREATE Procedure [dbo].[GetEntry](@ID int,@APPROVED bit)
AS
IF @APPROVED = 0
BEGIN 
    --see if the unapproved entry has already been viewed 
    IF (SELECT COUNT(*) 
            FROM [dbo].[Entries]
            WHERE EntryId = @ID AND Approved = @APPROVED AND Viewed = 0) > 0
    BEGIN
        -- do something here
        select *
        from [dbo].[Entries]
    END

END
于 2012-09-19T17:43:46.033 に答える