为什么它是一个无限循环?

ca9*_*3d9 4 t-sql sql-server sql-server-2008

以下代码将循环无穷大.但是,在SSMS中停止查询后,该表为空.更改if @id is not nullif @@rowcount > 0会得到预期的结果.为什么@id在空时没有得到null值#t

select 100 id into #t
l:
declare @id int
select top 1 @id = Id from #t 

if @id is not null
begin
    print @id

    --begin try
        raiserror ('Test error', 16, 10)
    --end try
    --begin catch
    --end catch  
    delete from #t where Id = @id
    goto l
end
Run Code Online (Sandbox Code Playgroud)
(1 row(s) affected)
100
Msg 50000, Level 16, State 10, Line 10
Test error

(1 row(s) affected) --------- The row was deleted here.
100
Msg 50000, Level 16, State 10, Line 10
Test error

(0 row(s) affected)
100
Msg 50000, Level 16, State 10, Line 10
Test error

......

更新:
更改select top 1 @id = Id from #tset @id = (select top 1 Id from #t)优秀作品.

And*_*mar 5

select不会为@idif 分配值为#t空:

select top 1 @id = Id from #t 
Run Code Online (Sandbox Code Playgroud)

解决它的一种方法:

set @id = null
select top 1 @id = Id from #t 
Run Code Online (Sandbox Code Playgroud)