この手順に問題がある理由について、いくつかのガイダンスが必要です。私は、 "END 'のキーワードの近くに不正な構文があるというエラーが表示されるようです。"T SQLネストされたIF ... BEGINで終了... END
問題があると思われる箇所にコメントを追加しました。コード内コメントで(x)と(y)とラベル付けされています。私は構文強調表示のためにDataGripを使用しました。しかし、私はまだなぜそれを理解していない。
私はCASE
ステートメントがこの問題を解決する可能性があることを認識しています。しかし、私はそれが他のブロックの場合で
何も間違ったIF...ELSE
CREATE PROCEDURE AuthenticateUser(
@UserName NVARCHAR(50),
@Password NVARCHAR(50),
@Result INT OUTPUT
) AS
BEGIN -- Cannot find a corresponding END
SET NOCOUNT ON
DECLARE @userID INT
IF exists(SELECT UserID FROM Users WHERE UserName = @UserName)
BEGIN -- paired with END (y)
SET @userID = (SELECT UserID FROM Users WHERE UserName = @UserName AND Password = dbo.EncryptPassword(@Password, Salt))
IF @userID IS NULL -- Paired with END (x)
SET @Result = 0
ELSE
SET @Result = 1
END -- paired with IF (x)
ELSE
SET @Result = 0
END -- paired with BEGIN (y)
GO
SQL Server 2012でSSMS 2016またはSSMS 2012で問題を複製できません。どのバージョンを使用していますか? クエリに他のコードがありますか? –
このコードはSSMS以外の場所から実行していますか? GoはSQLコマンドではなく、SSMSの区切り文字です –
ちょっと、あなたの手続きはうまくいきます。私はこれをSQL Server 2014で試しました。 – Harsheet