对于 list1,即使选择 1/0 生成错误,也会运行选择“确定”。对于列表 2,选择“确定”将不会运行,因为更新失败。两个列表都会产生 16 级的错误,但为什么会有这样的差异?
--1
select 1/0
select 'ok'
--2
create table #t (a int)
insert into #t values(1)
update #t set b = 99
select 'ok'
对于 list1,即使选择 1/0 生成错误,也会运行选择“确定”。对于列表 2,选择“确定”将不会运行,因为更新失败。两个列表都会产生 16 级的错误,但为什么会有这样的差异?
--1
select 1/0
select 'ok'
--2
create table #t (a int)
insert into #t values(1)
update #t set b = 99
select 'ok'
update #t set b = 99
是编译时错误。
批处理已编译,并且由于#t
不存在该语句,因此需要进行延迟编译。甚至不可能为该语句生成更新不存在的列的计划,因此该语句存在编译错误。
运行时编译错误中止范围。
运行时错误会产生什么影响(中止语句、范围、批处理或连接)并不总是直观的。请参阅发生错误时会发生什么?举一些例子。