我想在SQL Server存储过程的if/else语句中声明一个变量.我知道这是不可能的,因为SQL Server不会对程序中的变量声明进行内存管理.有没有办法让一个变量作用于if/else语句,然后在另一个if/else语句中重新声明一个具有相同名称的变量?例如:
create procedure Foo
as
begin
if exists (x)
begin
declare @bob int
set bob = 1
end
else
begin
declare @bob int
set bob = 2
end
end
Run Code Online (Sandbox Code Playgroud)
RTh*_*mas 24
从在线书籍:
变量的范围是可以引用变量的Transact-SQL语句的范围.变量的范围从声明它的位置延迟到声明它的批处理或存储过程的结尾.
然而.没有什么能阻止你这样做:
create procedure Foo as begin
declare @bob int
if exists (x)
begin
set @bob = 1
end
else
begin
set @bob = 2
end
end
Run Code Online (Sandbox Code Playgroud)
不,SQL非常有趣/很奇怪
在 代码块之前声明变量if exists
所以
declare @bob int
set @bob = 2
if exists(x)
begin
set @bob = 1
end
Run Code Online (Sandbox Code Playgroud)
现在,看看这些例子并试着猜测会发生什么
WHILE 1 = 2 --not true of course
BEGIN
DECLARE @VAR INT;
END
SET @VAR = 1;
SELECT @VAR;
Run Code Online (Sandbox Code Playgroud)
这当然有效,但每次都没有初始化
DECLARE @loop INT
SET @loop = 0
WHILE @loop <=6
BEGIN
DECLARE @VAR INT
SET @VAR = COALESCE(@VAR,0) + 1
SET @loop = @loop +1
END
SELECT @VAR
Run Code Online (Sandbox Code Playgroud)