【问题标题】:SQL Server 2014 if exists with multiple begin and endSQL Server 2014 如果存在多个开始和结束
【发布时间】:2017-10-03 12:09:57
【问题描述】:

我有这行代码:

if exists(select a.id, a.user_id 
          from AEmployeeLogs a
          inner join AUsers b on b.id = a.user_id
          where b.username = @username 
            and b.password = @password
            and convert(date, a.date_in) = convert(date, dateadd(HOUR, 15, getdate())))
    select 'Exist' as result;
else
begin
    select 
        a.id, username, firstname, lastname, user_image, UserType, title,
        'user_type_title', is_cashier, 
        case
           when @num is null then 1
           else @num + 1
        end 'number'
    from 
        dbo.AUsers a
    inner join 
        ALookUp b on b.id = a.UserType
    left join
        AEmployeeLogs c on c.user_id = a.id
    where 
        a.username = @username and a.password = @password

end

    declare @id int;
    select @id = a.id
    from dbo.AUsers a
    INNER JOIN ALookUp b
    on b.id = a.UserType            
    where username = @username and password = @password

begin

        INSERT INTO AEmployeeLogs (date_in,[user_id],note,isactive)
        select dateadd(HOUR, 15, getdate()), @id, '',0
        where @id is not null

end     

If Exists 函数工作正常,但是当我查看表 AEmployeeLogs 时,它仍然插入,即使存在当我在我的中有多个开始和结束函数时编写 else 语句的正确方法是什么查询

注意:第一个开始和结束的作品没有选择,但第二个作品需要帮助

【问题讨论】:

  • 您的插入到 AEmployeeLogs 将始终执行,它已离开您的 if/else 块的范围。第一个 End 是范围完成的地方。听起来您可能只需要在声明 @id 之前删除 End ,然后声明以下 Begin 。
  • 如果我将它们放在一个开头和结尾@MikeR,这个查询是否有效
  • 是的,如果你的 else 语句只有一组 Begin & End,那么查询应该可以工作。

标签: sql sql-server


【解决方案1】:

就像 cmets 中已经说明的那样,else 的范围在第一个 end 之后已经结束。

如下所示,它应该可以按预期工作:

IF EXISTS (
        SELECT a.id,
            a.user_id
        FROM AEmployeeLogs a
        INNER JOIN AUsers b ON b.id = a.user_id
        WHERE b.username = @username
            AND b.password = @password
            AND CONVERT(DATE, a.date_in) = CONVERT(DATE, dateadd(HOUR, 15, getdate()))
        )
    SELECT 'Exist' AS result;
ELSE
    BEGIN
        SELECT a.id, username, firstname, lastname, user_image, UserType, title, 'user_type_title', is_cashier, 
            CASE 
                WHEN @num IS NULL
                    THEN 1
                ELSE @num + 1
                END 'number'
        FROM dbo.AUsers a
        INNER JOIN ALookUp b ON b.id = a.UserType
        LEFT JOIN AEmployeeLogs c ON c.user_id = a.id
        WHERE a.username = @username
            AND a.password = @password

        DECLARE @id INT;

        SELECT @id = a.id
        FROM dbo.AUsers a
        INNER JOIN ALookUp b ON b.id = a.UserType
        WHERE username = @username
            AND password = @password

        INSERT INTO AEmployeeLogs (
            date_in,
            [user_id],
            note,
            isactive
            )
        SELECT dateadd(HOUR, 15, getdate()),
            @id,
            '',
            0
        WHERE @id IS NOT NULL
    END

【讨论】:

  • 没问题,很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2021-02-04
相关资源
最近更新 更多