我用 try ... catch 处理如下语句,发现下面这个错误不会触发begin try
  select * from tb1
end try
begin catch
  print Error_Message()
end catch上面语句中的错误是 tb1 这个表不存在
如果类似于这样子的错误不能捕捉的话,那大部分错误都是捕捉不到的,比如,我使用了临时表,而使用时,临时表中的字段如果不存在的话,编译时,sqlserver是不会提示错误的,只有运行时才能发现。

解决方案 »

  1.   

    对于与 TRY...CATCH 构造在同一执行级别发生的错误,TRY...CATCH 将不处理以下两类错误:编译错误,例如阻止批处理执行的语法错误。语句级重新编译过程中出现的错误,例如由于名称解析延迟而造成在编译后出现对象名解析错误
      

  2.   

    但是如果是临时表呢?编译的时候是没法发现的临时表是通过 select into  生成的,之后使用时才会报错,但是编译的时候根本不会发现错误
      

  3.   

    try /catch是运行是检查的,如果你要在编译时检查,就要换一下检查的方法了。
      

  4.   


    试试下面的语句!begin try
     EXEC(  'select * from tb1' )
    end try
    begin catch
      print Error_Message()
    end catch