1

对于 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'
4

1 回答 1

3

update #t set b = 99是编译时错误。

批处理已编译,并且由于#t不存在该语句,因此需要进行延迟编译。甚至不可能为该语句生成更新不存在的列的计划,因此该语句存在编译错误。

运行时编译错误中止范围。

运行时错误会产生什么影响(中止语句、范围、批处理或连接)并不总是直观的。请参阅发生错误时会发生什么?举一些例子。

于 2012-10-02T11:38:24.723 回答