Aaron Bertrand, a blogger on SQLBlog.com and keeper of www.aspfaq.com is one of those SQL Server MVPs whose material is always on my must-read list. Here's a really useful query he developed to determine the space used by objects in TempDB:
SELECT
 SPID = s.session_id,
 s.[host_name],
 s.[program_name],
 s.status,
 s.memory_usage,
 granted_memory = CONVERT(INT, r.granted_query_memory*8.00),
 t.text, 
 sourcedb = DB_NAME(r.database_id),
 workdb = DB_NAME(dt.database_id), 
 mg.*,
 su.*
FROM sys.dm_exec_sessions s
INNER JOIN sys.dm_db_session_space_usage su
   ON s.session_id = su.session_id
   AND su.database_id = DB_ID('tempdb') INNER JOIN sys.dm_exec_connections c
   ON s.session_id = c.most_recent_session_id
LEFT OUTER JOIN sys.dm_exec_requests r
   ON r.session_id = s.session_id
LEFT OUTER JOIN (
   SELECT
    session_id,
    database_id
   FROM sys.dm_tran_session_transactions t
   INNER JOIN sys.dm_tran_database_transactions dt
      ON t.transaction_id = dt.transaction_id 
   WHERE dt.database_id = DB_ID('tempdb')    GROUP BY  session_id,  database_id
   ) dt
   ON s.session_id = dt.session_id
 CROSS APPLY sys.dm_exec_sql_text(COALESCE(r.sql_handle,
 c.most_recent_sql_handle)) t
 LEFT OUTER JOIN sys.dm_exec_query_memory_grants mg
   ON s.session_id = mg.session_id
 WHERE (r.database_id = DB_ID('tempdb')    OR dt.database_id = DB_ID('tempdb'))   AND s.status = 'running'
 ORDER BY SPID;
You might consider writing your own query based upon dm_db_session_space_usage but this works quite well. Thanks for sharing this, Aaron!
Enjoy,
-Kev