I can get executed queries by using:

SELECT deqs.last_execution_time AS [Time]
    ,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

but I am also looking for username column, who executed these queries.


I would suggest you to create a server side trace or enable SQL Audit to track down activity from users that you don't trust.

Remember that DMV data gets reset if the DMV is cleared out, SQL Server is restarted, etc.

The closest you can get is using below query:

Script : Findout Who did what ?
Author : Kin Shah .. written for dba.stackexchange.com
USE master
SELECT sdest.DatabaseName 
FROM sys.dm_exec_sessions AS sdes
INNER JOIN sys.dm_exec_connections AS sdec ON sdec.session_id = sdes.session_id
    SELECT db_name(dbid) AS DatabaseName
        ,object_id(objectid) AS ObjName
                SELECT TEXT AS [processing-instruction(definition)]
                FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
                FOR XML PATH('')
                ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
    ) sdest
where sdes.session_id <> @@SPID 
--and sdes.nt_user_name = '' -- Put the username here !
ORDER BY sdec.session_id
| improve this answer | |
  • @kin +1 thanks for sharing this very useful script. it is somehow similiar to this one dba.stackexchange.com/questions/135140/… – Marcello Miorelli Apr 14 '16 at 9:49
  • 1
    @marcellomiorelli yeh .. the script can be used to address your question, but I would still go for a server side trace or SQLAduit. That way, you dont have to worry about data getting flushed out of DMVs. – Kin Shah Apr 14 '16 at 15:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.