代码之家  ›  专栏  ›  技术社区  ›  Jora Karyan

IF语句未按预期引发错误

  •  0
  • Jora Karyan  · 技术社区  · 3 年前

    假定 @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中,它会引发以下错误:

    错误:赋值前引用了局部变量“XYZ”

    1 回复  |  直到 3 年前
        1
  •  0
  •   GuidoG    3 年前

    在使用变量之前,需要先用类型声明变量

    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中声明变量似乎无关紧要,但作为一名程序员,我觉得这看起来很奇怪,所以我更喜欢把变量放在对我来说正确的范围内。