SQL中的declare用法
时间:2022-03-15 10:19
这个i的作用域就是if里面,如果我们在if外面用这个变量
if (true)
{
Int32 i = 1;
Console.WriteLine(i);
}
Console.WriteLine(i);
{
Int32 i = 1;
Console.WriteLine(i);
}
Console.WriteLine(i);
那第二条输出语句会报错
The name ‘i‘ does not exist in the current context
说明已经出了i的作用域了。
in if:1
out if:1
看见这个结果当时我很郁闷,SQL太出人意料了。
在SQL SERVER 2005的帮助文档里关于declare的帮助里发现这么一句话,备注的第三行“局部变量的作用域是其被声明时所在批处理”
Msdn的地址:
这行字在这么一大篇中还真挺不引人瞩目。
现在我们知道原来declare变量的作用域是所在的批处理,if阻断不了它的作用域,那上面我们的代码if内外的代码都在一个批处理中,所以@test都是可用的且if里面设置的值还在。
下面我改造一下代码,SQL中是以GO语句来区分批处理的
IF 1=1
BEGIN
DECLARE @test VARCHAR
SET @test=‘1‘
PRINT ‘in if:‘+@test
END
GO
PRINT ‘out if:‘+@test
BEGIN
DECLARE @test VARCHAR
SET @test=‘1‘
PRINT ‘in if:‘+@test
END
GO
PRINT ‘out if:‘+@test
这下对了,检查语法后SQL报错“必须声明标量变量"@test"”
SQL中的declare用法,布布扣,bubuko.com