T-SQL if语句错误

时间:2013-05-16 11:48:57

标签: sql-server-2008 tsql if-statement

我正在尝试执行以下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 

5 个答案:

答案 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  ))