|
Posted by John Bokma on 02/03/06 02:37
John Bokma <john@castleamber.com> wrote:
> I am quite new to MS SQL, and I want to read rows from a todo table,
> and when a row has been processed, I want to delete that row.
>
> Ages ago in MySQL I would probably have locked the table, select,
> process a row, delete a row, unlock the table.
>
> I have been reading through the documentation from MS SQL, but it's
> not clear what exactly I should do.
>
> Since I want to lock only one table in the select (the others just
> provide data, and are not modified), what's a good solution?
what I came up with:
BEGIN TRANSACTION
SELECT TOP 10 ..... FROM A WITH(ROWLOCK,HOLDLOCK), B, C WHERE ....
.....
.... delete each row in A in TOP 10
END TRANSACTION
what I want to prevent is that more then one process selects 10 rows, and
starts to delete rows (from A) that are selected by any of the other ones.
to me, a rowlock is sufficient, and fine grained enough, and the hold lock
holds it to the end of transaction.
Am I right?
--
John MexIT: http://johnbokma.com/mexit/
personal page: http://johnbokma.com/
Experienced programmer available: http://castleamber.com/
Happy Customers: http://castleamber.com/testimonials.html
[Back to original message]
|