Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 单个If语句需要Begin&;以代码块结尾_Sql Server_Tsql_If Statement - Fatal编程技术网

Sql server 单个If语句需要Begin&;以代码块结尾

Sql server 单个If语句需要Begin&;以代码块结尾,sql-server,tsql,if-statement,Sql Server,Tsql,If Statement,我在不久前遇到过这个问题,我想知道为什么“Begin”和“End”需要生成正确的值。if语句是单例语句,不需要“Begin”和“End”,if中的多个语句需要它,如果省略,则在尝试创建/更改过程时会生成执行错误 关于MS SQL中为什么会出现这种行为,您有什么想法吗 谢谢,克雷格 --结果集2返回正确的值 SQL 我认为没有开始和结束的If应该只包含一条指令。 我建议加上BEGIN。。结束每个IF,以帮助保持编码的一致性。将显式开始s和结束s添加到损坏的版本会产生这种情况,其逻辑与工作版本不同:

我在不久前遇到过这个问题,我想知道为什么“Begin”和“End”需要生成正确的值。if语句是单例语句,不需要“Begin”和“End”,if中的多个语句需要它,如果省略,则在尝试创建/更改过程时会生成执行错误

关于MS SQL中为什么会出现这种行为,您有什么想法吗

谢谢,克雷格

--结果集2返回正确的值

SQL


我认为没有开始和结束的If应该只包含一条指令。
我建议加上BEGIN。。结束每个IF,以帮助保持编码的一致性。

将显式
开始
s和
结束
s添加到损坏的版本会产生这种情况,其逻辑与工作版本不同:

If(@im_weigh_item=1)
BEGIN
    If(@rank_wi_ven_ctg='U')
    BEGIN
        Select @UOM = 'U'
    END
    Else  -- this "else" is associated with the wrong  "if"
    BEGIN
        If(@po_Qty_uom != 'C' )
        BEGIN
            If(@po_Qty!=@casepack)
            BEGIN
                Select @UOM = 'U', @Qty = @Qty * @po_Qty
            END
        END
    END
END

ELSE语句始终绑定到最近的前一个IF,因此您的

If(@im_weigh_item=1)
  If(@rank_wi_ven_ctg='U')
    Select @UOM = 'U'
Else
  If(@po_Qty_uom != 'C' )
  If(@po_Qty!=@casepack)
    Select @UOM = 'U', @Qty = @Qty * @po_Qty
被解释为:

If(@im_weigh_item=1) begin
  If(@rank_wi_ven_ctg='U') begin
    Select @UOM = 'U'
  end
  Else begin
    If(@po_Qty_uom != 'C' ) begin
      If(@po_Qty!=@casepack) begin
        Select @UOM = 'U', @Qty = @Qty * @po_Qty
      end
    end
  end
end
If(@im_weigh_item=1) begin
  If(@rank_wi_ven_ctg='U') begin
    Select @UOM = 'U'
  end
  Else begin
    If(@po_Qty_uom != 'C' ) begin
      If(@po_Qty!=@casepack) begin
        Select @UOM = 'U', @Qty = @Qty * @po_Qty
      end
    end
  end
end