我只想验证我在这里没有遗漏某些东西......所以请耐心等待.
我正在重写很多旧的存储过程,并继续看到类似于这样的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编写的),顺便说一句
就像我说的那样,我只是想把我的脑袋缠在这个意大利面上.欢迎任何想法/意见/有启发性的见解
谢谢
在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