我想就这个程序存在问题的原因提供一些指导。我似乎收到一个错误,指出"关键字' 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
答案 0 :(得分:1)
如何尝试在每个IF ELSE条件下添加BEGIN和END标签。这样的事情。
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 1
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)
BEGIN
SET @Result = 0
END
ELSE
BEGIN
SET @Result = 1
END
END -- paired with IF (x)
ELSE
BEGIN
SET @Result = 0
END
END -- paired with BEGIN (y)
GO
答案 1 :(得分:0)
@Edwinj
If else阻止没有错,代码中存在问题
盐(密码= dbo.EncryptPassword(@ Password,盐)))
Salt 既不是数字也不是真实的或字符串,所以函数EncryptPassword将失败并显示错误。