Interesting thread from the internal dbtalk alias that is used for supporting SQL Server technical questions.

The thread that triggered this post references the following forum problem;

http://www.unixadmintalk.com/f46/sp_send_dbmail-wont-send-email-using-query-175160/

Summary of the problem is that when you try and send mail in a transaction that uses queries then it appears to hang, if you remove the transaction all is well, so what's going on? Well BOL gives us a pretty big hint;

 

sp_send_dbmail (Transact-SQL)

[ @query = ] 'query'

Is a query to execute. The results of the query can be attached as a file, or included in the body of the e-mail message. The query is of type nvarchar(max), and can contain any valid Transact-SQL statements. Note that the query is executed in a separate session, so local variables in the script calling sp_send_dbmail are not available to the query.

 

http://msdn2.microsoft.com/en-us/library/ms190307.aspx

 

As it transpires the use of the separate session to run the query can cause WAY more problems than the local variable problem.

David Browne a Technology Architect out of Dallas hits the nail on the head (probably<g>):

The query is issued immediately (not queued), and in a separate session.  If the query must wait to acquire locks held by the session calling sp_send_dbmail then the query execution will block, and you will experience a deadlock between the session running the query and the session waiting for sp_send_dbmail to finish.  Since the deadlock involves one lock wait and a non-lock wait, however, it is not detected as a deadlock and the two sessions simply hang.

Either commit the data so the other session can see it or change the query to read the uncommitted data with (nolock).