假設@Ref <> 0在第一個條件。因此我的代碼不會達到@XYZ (line 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”
uj5u.com熱心網友回復:
您需要先使用型別宣告變數,然后才能使用它
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 我確實會期待一個錯誤,但它不知何故沒有
這在檔案中被解釋為每個設計都是正常的,盡管在我看來這是一個缺陷。
另請參閱有關同一主題的此問題
編輯 3
因此,在 TSQL 中宣告變數的位置似乎無關緊要,但作為一名程式員,我覺得這看起來很奇怪,所以我更喜歡將變數放在對我來說正確的范圍內。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457689.html
上一篇:python-在for回圈中處理一列的if-else
下一篇:根據條件分配多個行值
