比如说你处理一个系统的时候,每一步的操作都要记log, log是一个表。在事务中如果三步操作,1,2 操作的结果已经记录了,第三句话失败,现在希望在log表里保存log信息。就是这样的一个需求。

解决方案 »

  1.   

    做成两个:
    一个写log
    一个事务写数据
      

  2.   

    BULK INSERT statement can be executed within a user-defined transaction. Rolling back a user-defined transaction that uses a BULK INSERT statement and BATCHSIZE clause to import data into a table or view using multiple batches rolls back all batches sent to SQL Server.
      

  3.   

    在前台程序里处理好些。
    比如在ado.net里,事务可以用基于连接的事务和基于命令的事务。一个是回滚当前连接上的操作,一个是回滚当前命令里的事务。你的要求本来就是殊殊的,又怎么有简单的方法呢? 没有你想像中的加个标记让其不受影响的做法,至少sqlserver2005及其以下版本没有。
      

  4.   


    真的很无聊...
    解决方法有一个,利用表变量.定义一个@T表变量,将记录LOG档的动作记到@T中,事务结束後再将@T的内容新增到LOG表中。EX:BEGIN TRANINSERT INTO @T VALUES (123)
    INSERT INTO @T VALUES (456)ROLLBACK  --Insert到@T中的内容不会被回滚.