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