• No, that's incorrect. Implicit transactions create an implicit multistatement transaction. But single statements still have their own implicit transactions. Take this batch, for instance:

    INSERT Tbl VALUES ('w', 'x')

    INSERT Tbl VALUES ('y', 'z')

    Each of these inserts will start and end its own transaction (implicit -- because you are not explicitly starting a tran). EVERY DATA MODIFICATION USES A TRANSACTION. You cannot turn that off.

    If you want to enlist both of these inserts in a single transaction (so that, e.g., if one fails the other can be rolled back with it), you have two choices:

    BEGIN TRAN

    -- do work

    (COMMIT or ROLLBACK)

    or:

    SET IMPLICIT_TRANSACTIONS ON

    -- do work

    (COMMIT or ROLLBACK)

    The difference between these is that if you use IMPLICIT_TRANSACTIONS, another multistatement tran starts automatically as soon as any data modification occurs. With BEGIN TRAN, you're controlling it, and you can let statements run using their own, atomic transactions.

    Understanding how transactions work is extremely important when working with any DBMS. I highly recommend picking up Kalen Delaney's book, _Inside SQL Server 2000_, if any of this is new to you.

    --
    Adam Machanic
    whoisactive