declare @i int = 1
if (@i= 2)
Begin
declare @t table (value int)
insert into @t
select 1
select * from @t
end
else
select *from @t
---------------
declare @i int = 1
if (@i= 2)
Begin
create table #t(value int)
insert into #t
select 1
end
else
select *from #t
为什么表变量没有得到无效的对象名?
答案 0 :(得分:2)
T-SQL中变量的范围不限于块。局部变量的范围是声明它的批处理。
有一个请求可以声明仅在块中可见的变量,但Microsoft拒绝了它。这是link
答案 1 :(得分:1)
答案 2 :(得分:0)
我猜SQL Server足够聪明,可以将“声明@t表(值为int)”外接并先执行它然后执行所有其他操作。这可以通过在语句的“ELSE”部分中插入“插入@t values(6)”来证明。您的第二个示例 - 具有临时表的DDL的示例 - 确实按设计顺序执行,因此在您的示例中不会创建对象。