• I'll probably miss some out, but when creating a table rows are added to sysobjects, syscolumns and sysindexes. There are probably more. So running a create table inside a transaction will put locks on those tables and any others it accesses. Until you commit, those locks will be held and could get in the way of other operations. You can always experiment by running a create table or alter table inside a transaction using query analyser. Do something like

    begin transaction

    create table test

    (

    col1 int

    )

    then run sp_lock . That will return all the object ids and database ids of locked objects.

    As for why you are doing it, I think I see what you are doing but I haven't fully understood it just yet. But if it works and you are happy with it then it'll be okay.

    Mike