Sql server 单个If语句需要Begin&;以代码块结尾
我在不久前遇到过这个问题,我想知道为什么“Begin”和“End”需要生成正确的值。if语句是单例语句,不需要“Begin”和“End”,if中的多个语句需要它,如果省略,则在尝试创建/更改过程时会生成执行错误 关于MS SQL中为什么会出现这种行为,您有什么想法吗 谢谢,克雷格 --结果集2返回正确的值 SQLSql 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添加到损坏的版本会产生这种情况,其逻辑与工作版本不同:
我认为没有开始和结束的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