T-sql陷阱_表变量
sql server表变量与临时表又一个不同之处
有些时候不一定按照你的理想顺序执行
demo
declare @maxid int if object_id('tempdb.dbo.#tmp','U') is not null drop table #tmp create table #tmp ( ca int not null identity(1,1), cb varchar(10) ) insert into #tmp(cb)values('is 1'),(null),('is 3') select @maxid=SCOPE_IDENTITY() declare @i int=1 while @i<=@maxid begin declare @tmp_a table (id int ,cb varchar(10)) if object_id('tempdb.dbo.#tmp_b','U') is not null drop table #tmp_b create table #tmp_b ( ca int , cb varchar(10) ) insert into @tmp_a select * from #tmp where ca=@i insert into #tmp_b select * from #tmp where ca=@i select @i=@i+1 end --查询1 select * from @tmp_a --查询2 select * from #tmp_b
如果没有踩到此坑的人,会认为以上查询1和查询2的结果相同,因为按照正常的逻辑顺序就该这样,但是结果真的是这样的吗,不放copy试试
实际结果如下
实际执行顺序如下