我正在尝试执行以下SQL 2008代码,它说“=”和“else”附近有问题...我无法理解代码有什么问题
ALTER PROCEDURE dbo.LoginEmp @username NVARCHAR(10),
@password NVARCHAR(10),
@confirm INT output,
@emp_name NVARCHAR(50) output,
@emp_id BIGINT output
AS
IF EXISTS (SELECT @emp_id = emp_id,
@emp_name = emp_name_ara
FROM Employee
WHERE ( emp_username LIKE @username
AND emp_password LIKE @password ))
BEGIN
SET @confirm=1
INSERT INTO EmployeeLog
(log_emp_id,
log_act_id,
log_date,
log_data)
VALUES (@emp_id,
1,
GETDATE(),
-1)
END
ELSE
BEGIN
SET @confirm=0
END
RETURN
答案 0 :(得分:2)
不是尝试分配EXISTS
内的输出参数来进行分配,而是检查@@rowcount
以查看是否找到了匹配的行。
ALTER PROCEDURE dbo.LoginEmp @username NVARCHAR(10),
@password NVARCHAR(10),
@confirm INT output,
@emp_name NVARCHAR(50) output,
@emp_id BIGINT output
AS
SELECT @emp_id = emp_id,
@emp_name = emp_name_ara
FROM Employee
WHERE ( emp_username = @username
AND emp_password = @password )
IF @@ROWCOUNT = 1
BEGIN
SET @confirm=1
INSERT INTO EmployeeLog
(log_emp_id,
log_act_id,
log_date,
log_data)
VALUES (@emp_id,
1,
GETDATE(),
-1)
END
ELSE
BEGIN
SET @confirm=0
END
答案 1 :(得分:1)
存在运算符检查查询返回的结果集中是否存在任何行。 在您的示例中,它只是为变量赋值。 如需更多参考,请查看以下链接:Assigning a variable inside an IF EXISTS clause
答案 2 :(得分:0)
您可以在IF EXISTS
BEGIN
吗?
答案 3 :(得分:0)
试试这个:
ALTER PROCEDURE dbo.LoginEmp
@username nvarchar(10),
@password nvarchar(10),
@confirm int output,
@emp_name nvarchar(50) output,
@emp_id bigint output
AS
Begin
if exists (SELECT emp_id, emp_name_ara FROM Employee WHERE (emp_username LIKE @username AND emp_password LIKE @password)) begin
// Here Retrieve the Data into Variable again. Like You did Above Before.
set @confirm=1
INSERT INTO EmployeeLog (log_emp_id,log_act_id,log_date,log_data) VALUES (@emp_id,1,GETDATE(),-1)
end
else begin
set @confirm=0
end
end
RETURN
答案 4 :(得分:0)
更改
SELECT @emp_id = emp_id,
@emp_name = emp_name_ara
到
SELECT emp_id, emp_name_ara
将 @emp_id 和 @emp_name 变量附加到WHERE子句
IF EXISTS (SELECT emp_id, emp_name_ara
FROM Employee
WHERE ( emp_username LIKE @username
AND emp_password LIKE @password AND emp_id=@emp_id AND emp_name_ara = @emp_name ))