你没有return应该就会一直往下执行吧,不会跳出吧。

解决方案 »

  1.   

    對呀,那我怎麼知道執行是否成功。因為@@Error為0則成功不為0剛失敗,可它都不向下執行,這種問題可如何處理呢?
      

  2.   

    你这个错误会跳出来.
    你的SQL是2005吗?
    你可以用Try....Catch....
      

  3.   


    Begin Try
        create table _t(nf nvarchar(50),name nvarchar(50),tmp float) 
        insert into _t select '','',',' 
    END TRY 
    Begin Catch
        print N'错误'
    END Catch
      

  4.   

    表_t的tmp字段為float而插入的為","(逗號),所以會出錯。
    其實想要的是不管什麼錯誤都能提示出來。
      

  5.   

    我試了不行,是不是我的是Sql2000的問題?
      

  6.   

    2000不能用try   catch.
    难道你的存储一定会出现这种问题吗?
    其实你可以用@@rowcount
    如果没有受影响的行,则说明没有插进去。
      

  7.   

    放到一个事物里面
    1)放在一个try~catch里面
    alter PROCEDURE [dbo].[dd]
    AS
    BEGIN
        begin try 
            begin tran
                  insert into student values('new111111111111111111111111111','1',2,'23',3,getdate())
                  insert into person values('new21312',5,'45')
                commit tran
        end  try
        begin catch
            print 'a'
            rollback tran
        end catch
    end2)set xact_abord  on有错误发生时,整个自动回滚ALTER PROCEDURE [dbo].[dd2]
    AS
    BEGIN
        begin tran
            
            SET XACT_ABORT  on
            insert into person values('n',5,'45')
            insert into student values('new111111111111111111111111111123','1',2,'23',3,getdate())    commit tran
    end
      

  8.   

    謝謝你的回復,但我試過了還是不可以,是不是我SQL是2000的問題?
      

  9.   

    不是存儲過程,而是想要在執行完一條SQL命令後想知道它是否執行成功。
      

  10.   

    create table _t(nf nvarchar(10),name nvarchar(10),tmp float) 
    go
    create proc test
    as
    begin tran
      insert into _t select '','',1.0
      insert into _t select '','',','  
      if @@ERROR <>0
      begin
        rollback tran 
        return
      end
    commit tran
    goexec test
    /*
    (1 row(s) affected)
    Msg 8114, Level 16, State 5, Procedure test, Line 5
    Error converting data type varchar to float.
    */ 
    select * from _t
    /*
    nf         name       tmp
    ---------- ---------- ----------------------(0 row(s) affected)
    */
    drop table _t
    drop proc test
      

  11.   


    是这个意思??create procedure proc_test
    as 
    begin
    begin try
    insert tb values('值1')
    if @@Error <> 0 
    goto aa; 
    insert tb values('值2')
    if @@Error <> 0 
    goto aa; 
    insert tb values('值3')
    if @@Error <> 0 
    goto aa; 
    END TRY 
    begin catch
    aa:
      RAISERROR ('错误',16, 1) 
    rollback tran
    END Catch
    end
      

  12.   

    謝謝,但是在begin tran
      insert into _t select '','',1.0
      insert into _t select '','',',' 
      print(@error)--這裡好像沒有值,也就是說好像沒有執行。
      if @@ERROR <>0
      begin
        rollback tran 
        return
      end
    commit tran
      

  13.   

    select @a=@@errors
    print @a
    先看下错误内容
      

  14.   

    謝謝,但是根本不執行select @a=@@errors ,也就取不到值.
      

  15.   

    --1.Try...Catch..
    BEGIN TRY 
    create table _t(nf nvarchar(50),name nvarchar(50),tmp float) 
    insert into _t select '','',',' 
    END TRY 
    BEGIN CATCH
    IF @@ERROR<>0
    PRINT('错误')
    END CATCH
    --TRY...CATCH 构造捕捉所有严重级别大于 10 但不终止数据库连接的错误。--2.分开批次
    create table _t(
    nf nvarchar(50),
    name nvarchar(50),
    tmp float)
     
    insert into _t select '','',',' 
    go
    IF @@ERROR<>0
    PRINT('错误')
      

  16.   

    看错误号,再查找严重级别。
    然后参考
    http://topic.csdn.net/u/20090326/22/f81549e2-9ef3-454a-b6fc-1c1f23390c01.html
      

  17.   

    ALTER PROCEDURE [dbo].[spReceiveDyeingForeign]   
     @Contract_No varchar(10)
     ,@sReceiver varchar(10)
     ,@Msg varchar(100) output
    AS
    set Xact_ABORT ON
    begin tran 
      insert into _t select '','',1.0 
      insert into _t select '','',','  if @@error<>0 
    begin
      SET @Msg = '此操作出错'
    end
    end
    if @Msg<>''
    begin
    SET @Msg = 'OK'
    end
    set Xact_ABORT OFF
    RETURN
      

  18.   

      begin try    
      end try   是2005的用法,可以扑捉任何错误楼主是SQL2000,@@ERROR是根据错误级别来判断的,错误级别不同,有可能扑捉不到错误的参考如下贴:http://topic.csdn.net/u/20090326/22/f81549e2-9ef3-454a-b6fc-1c1f23390c01.html
      

  19.   

    遇到过类似的问题
    后来改变了下思路
    在插入的时候同时做条件限制,如:
    insert into _t select 1,2,3 where F1(假设F1为主键)=1
    再接着判断 @@rowcount
    如果为0 插入失败
    如果为1 插入成功