这是我的 sql 代码 -
declare @maxprice int --1
set @maxprice = 1000 --2
select @maxprice --3
我可以毫无错误地执行这些组合 1,2 和 1,2,3。但是,当我先执行 1,2 再执行 3 时,我得到了我提到的错误。
我无法理解为什么会发生这种情况。select @maxprice 不应该类似于常规的 select 语句吗?
这是我的 sql 代码 -
declare @maxprice int --1
set @maxprice = 1000 --2
select @maxprice --3
我可以毫无错误地执行这些组合 1,2 和 1,2,3。但是,当我先执行 1,2 再执行 3 时,我得到了我提到的错误。
我无法理解为什么会发生这种情况。select @maxprice 不应该类似于常规的 select 语句吗?
像这样的 SQL 语句作为块执行,命令和定义只在块内有效。一旦块完成,任何声明的变量都会超出范围,并且是未定义的。
因此,当您只执行第 3 行时,SQL Server 不知道或检查您之前是否对相同的变量做过一些事情,并且自然会抱怨该变量未定义。
如果不是这样,并且一旦声明的变量保留在范围内(例如,在会话期间),系统将必须非常小心地解决冲突之间的冲突,例如,在一个过程@maxprice
中声明,与输入另一个。int
money
可以在此处找到有关 SQL Server 中变量和范围规则的更详细讨论。