我只是想证实我在这里没有遗漏某些东西......所以请耐心等待。
我正在重写很多旧的存储过程,并且看到IF语句的格式与此类似:
begin
if @someParameter <> 'ThisType'
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
end
所以Begin ... End块只是包装(但不影响)IF语句,对吧?这是IF的一些旧语法吗?
写这篇文章的人在这份工作之前没有太多的SQL经验;他主要在VB(pre -.NET)工作。也许这是来自其他语言的语法,所以他不小心写了这种方式(习惯)?
这是SQL Server 2005(代码是针对SQL Server 2000编写的),btw
像我说的那样,我只是想把我的大脑包裹在这个意大利面上。欢迎任何想法/意见/有启发性的见解由于
答案 0 :(得分:10)
在T-SQL中,Begin和END应该包含IF(或其他控制结构)的包含语句,并执行多个语句(如代码块)
可行吗
if @someParameter <> 'ThisType'
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
也可以,但不是绝对必要
if @someParameter <> 'ThisType'
Begin
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
End
会按预期工作
if @someParameter <> 'ThisType'
Begin
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
{...do other stuff}
End
无法按预期工作(如果您希望这两个语句仅在IF条件为我时执行)
if @someParameter <> 'ThisType'
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
{...do other stuff}
没有语义价值
Begin --without wrapping control structure
{...stuff}
End
答案 1 :(得分:3)
正确。示例中的begin ... end块封装了IF语句,但不会影响它。虽然有罪的程序员可能应该已经完成了
BEGIN
if ... BEGIN
set @somecode...
END
END
答案 2 :(得分:1)
您可以安全地将其更改为:
if @someParameter <> 'ThisType'
begin
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
end
begin..end 仍然是额外的,但代码更具可读性。
答案 3 :(得分:1)
这取决于之前的情况。您发布的代码与
相同if @someParameter <> 'ThisType'
set @someCode = right(cast(@pYear as varchar(6)),2) + 'THIS'
在if之前可能有一个声明需要一个开始/结束块。