存储过程中:
先检索数据库表中制定的记录是否存在,如果存在则updata相应字段,如果不存在则insert一条新记录。
if(updata()=失败)
{
insert();
}存在的问题:
1、updata语句的成功失败的状态;
2、我的这个存储过程操作比较频繁,需要提高效率

解决方案 »

  1.   

    if exists (select 1 from table where id=@id)
        update table set .... where id=@id
    else
        insert ...不行吗?
      

  2.   

    if @@Error=0
    --成功
    else
    --不成功
      

  3.   

    if((update CardBusinessPoint set TotalOutPoint =(TotalOutPoint +@cutpoint))=@@Error)
    begin
    insert CardBusinessPoint xxxx
    end是这样的吗?
      

  4.   

    不是
    是先执行update语句,然后在下面执行:
    update t set s=1
    if @@Error=0--成功
      insert CardBusinessPoint xxxx
    else--不成功
      ...
    这个@@Error是最近一次操作成功与否的标志符,你可以放心地先执行你的语句,然后紧接着判断@@Error的值是否为0就可以了.不是拿它去和update比较.
      

  5.   

    update t set s=1
    if @@Error=0--成功--------------------update失败吧?
      insert CardBusinessPoint xxxx
    else--不成功另外,@@Error是全局变量吧?
    整个SQL各个存储过程是并行处理的还是串行处理的?会不会出现其他存储过程同时处理的@@Error给我这个存储过程一个错误的结果啊
      

  6.   

    update CardBusinessPoint set TotalOutPoint =(TotalOutPoint +@cutpoint),RePoint=(RePoint+@cutpoint) where id=left(@terminalID,8) and datediff(dd,[Date],getdate())=0
    if @@Error=1
    begin
     insert  into CardBusinessPoint (BusinessID,[Date],TotalInPoint,TotalOutPoint,InputPoint,MessagePoint,FindPoint,RePoint,BounsPoint) values(left(@terminalID,8),getdate(),0,@cutpoint,0,0,0,@cutpoint,0)
    end没有达到我预期的效果啊
    update没有成功的时候,也没有增加新记录!!!
      

  7.   

    UPDATE tablename set colname='' WHERE ……
    set @row_var=@@rowcount
    if @row_var=0
    begin
    INSERT tablename (……) VALUES (……)
    end
      

  8.   

    update 语句,如果条件为假,@@error也是等于0的吧。不能判断是否UPDATE成功否吧。@@rowcount 可以
      

  9.   

    @@ERROR
    返回最后执行的 Transact-SQL 语句的错误代码。
    用 @@ERROR 检测一个特定错误
    下面的示例用 @@ERROR 在一个 UPDATE 语句中检测限制检查冲突(错误 #547)。USE pubs
    GO
    UPDATE authors SET au_id = '172 32 1176'
    WHERE au_id = "172-32-1176"IF @@ERROR = 547
       print "A check constraint violation occurred"