1

list1 の場合、select 1/0 でエラーが発生しても select 'ok' が実行されます。リスト 2 では、更新が失敗したため、「ok」を選択して実行されません。どちらのリストもレベル 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 に答える