先看一个错误例子:
declare @a varchar(50)
declare @b int
set @a='aa'
set @b= cast(@a as int)
select @b
执行后,提示:
服务器: 消息 245,级别 16,状态 1,行 4
将 varchar 值 'aa' 转换为数据类型为 int 的列时发生语法错误。我想要他出错的时候,去做其他事,而不是终止了,怎么修改?
比如说,转换‘aa'出错了,就set @b=0.

解决方案 »

  1.   

    这个恐怕很难。终止不终止不是你说了算,是SQL说了算,严重错误终止当前批执行。
      

  2.   

    使用系统全局变量@@error,如果有错无返回错误号,整型数,如果没错返回0。declare @a varchar(50) 
    declare @b int 
    declare @error int 
    set @a='aa' 
    set @b= cast(@a as int) 
    set @error=@error+@@error
    select @b
    if @error<>0
    begin
    ……
    end
      

  3.   

    2000中没有捕捉错误的处理,2005才开始有try catch
      

  4.   

    2005里面可以,2000就不知道了
    貌似不能.
    declare @a varchar(50) 
    declare @b int 
    set @a='aa' 
    begin try 
    set @b= cast(@a as int) 
    end try
    begin catch
      if @@error <>0
      print 'error'
    else
      print '1111'
    end catch/*
    error
    */
      

  5.   


    不行,还是返回:服务器: 消息 245,级别 16,状态 1,行 5
    将 varchar 值 'aa' 转换为数据类型为 int 的列时发生语法错误。