gpt4 book ai didi

sql-server - 在存储过程中的 while block 内定义的变量范围 - SQl Server

转载 作者:行者123 更新时间:2023-12-01 21:41:59 26 4
gpt4 key购买 nike

我在存储过程中遇到了一个有趣的场景(至少对我来说)。想听听专家的意见和想法。

DECLARE @loopcounter INT
SET @loopcounter=10

WHILE @loopcounter > 0
BEGIN
DECLARE @insidevalue int

IF (@loopcounter%2 = 0)
SET @insidevalue = @loopcounter

PRINT 'Value_' + CAST(@insidevalue AS NVARCHAR) + '_'

SET @loopcounter = @loopcounter - 1
END

我期望这个 block 会给出如下输出

Value_10_

Value_ _

Value_8_

Value_ _

Value_6_

Value_ _

Value_4_

Value_ _

Value_2_

Value_ _

相反,我得到的输出如下:

Value_10_

Value_10_

Value_8_

Value_8_

Value_6_

Value_6_

Value_4_

Value_4_

Value_2_

Value_2_

我想如果我在 while block 内声明一个变量,那么对于每次迭代,它都会将该值重置为 NULL 或默认值(来自 C# 背景)。

如果这是设计使然,那么我的问题是 SQLServer 如何处理 while block 内该变量的“DECLARE”语句?由于变量已经在内存中,它会忽略它吗?

有人可以向我解释一下这种行为吗?

最佳答案

变量范围是整个批处理,在本例中是一个存储过程。

并不是每个循环都重新声明

所以这完全符合预期

编辑:

最近有一个blog article这非常相似。作者很快就纠正了:-)

关于sql-server - 在存储过程中的 while block 内定义的变量范围 - SQl Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com