IF 语句未按预期引发错误

IF statement not raising error as expected

假设第一个条件为 @Ref <> 0。因此我的代码将不会达到 @XYZ (第 2 行).

的声明

我认为它必须在第二个 IF 中引发错误,因为 @XZY 未声明。

但我很惊讶没有出现错误。

IF @Ref = 0 
BEGIN
    DECLARE @XYZ int

    SELECT @XYZ = RISKGROUP
    FROM POLCONT WITH (NOLOCK, NOWAIT) 
    WHERE CONT = 555
END

IF @RISKGROUP <> @XYZ  
BEGIN
    -- do something ...
END

例如

在 python 中引发此错误:

Error: local variable 'XYZ' referenced before assignment

您需要先用类型声明您的变量,然后才能使用它

declare @xyz int -- assuming the datatype of column riskgroup is also int

select @xyz = riskgroup
from   polcont
where  polcont = 555

编辑

自从我发布我的答案后你改变了你的问题,现在你的问题是你在错误的范围内声明了变量。

DECLARE @XYZ int

if @Ref = 0 
begin 
   SELECT @XYZ = RISKGROUP
   FROM   POLCONT --WITH (NOLOCK, NOWAIT) don't do nolock everywhere !
   WHERE  CONT = 555
end

if @RISKGROUP <> @XYZ  
begin
   -- do something ...
end

编辑 2

关于你的问题为什么不报错,确实奇怪

看到这个DBFiddle 我确实希望有一个错误,但它不会

这在 documents 中作为正常设计进行了解释,但在我看来这是一个缺陷。
另请参阅关于同一主题的Question

编辑 3

所以在 TSQL 中声明变量似乎无关紧要,但作为一名程序员,我觉得这看起来很奇怪,所以我更愿意将我的变量放在对我来说正确的范围内。