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.
一个写log
一个事务写数据
比如在ado.net里,事务可以用基于连接的事务和基于命令的事务。一个是回滚当前连接上的操作,一个是回滚当前命令里的事务。你的要求本来就是殊殊的,又怎么有简单的方法呢? 没有你想像中的加个标记让其不受影响的做法,至少sqlserver2005及其以下版本没有。
真的很无聊...
解决方法有一个,利用表变量.定义一个@T表变量,将记录LOG档的动作记到@T中,事务结束後再将@T的内容新增到LOG表中。EX:BEGIN TRANINSERT INTO @T VALUES (123)
INSERT INTO @T VALUES (456)ROLLBACK --Insert到@T中的内容不会被回滚.