• One alternative that I have used is app server generated SQL that uses "select X, X union all" to create a table of values to be inserted, updated or deleted.

    Example:

    insert into foo ( a, b, c)

    select 1, 'bob', 'smith'

    union all

    select 3, 'John', 'Doe'

    union all

    select 93, 'Jane', 'Jones'

    union all ....

    Note you MUST BIND the values in the SELECT(s) to insure you do not have SQL injection happening.

    This is very efficent and quick. When I first used it we needed to do upto ~1500 3 column inserts from a web app. This was taking 5+ min to complete. When changed took less than 5 seconds (might have been even lower don't remember for sure). One limit we found with SQL 2000 I belive (might have been 7) was 1024 unions was the max it would process in a single statement. So we split the data and did and additional insert into for every 1000 records being done. So do test the limit with SQL 2005/2008 befor using my method.