Cursor is a best solution in the following situation.
You want to execute a long running update or delete query and want to allow
the users to access the table while the query is running. If you don't use a
cursor and execute a long running Delete or Update query, you will lock the
table and the users will not be able to access the table. In this situation
your best option would be to use a cursor along with the ROWLOCK queryhint
and transaction ISOLATION LEVEL.
As far as I know this is the only situation where you should ...