I found that sys.dm_exec_requests has a Schedule_ID field in it. You can join dm_io_pending_io_requests to it on that field. Join to Exec_Requests and exec_sql_text and you can get what you are after. the first query I got from Pinal Dave: Here
Second query I came up with after looking at BOL.
SELECT vfs.database_id, df.name, df.physical_name
,vfs.FILE_ID, ior.io_pending
FROM sys.dm_io_pending_io_requests ior
INNER JOIN sys.dm_io_virtual_file_stats (DB_ID(), NULL) vfs
ON (vfs.file_handle = ior.io_handle)
INNER JOIN sys.database_files df ON (df.FILE_ID = vfs.FILE_ID);
GO
SELECT ipir.io_type, ipir.io_pending,
ipir.scheduler_address, ipir.io_handle,
os.scheduler_id, os.cpu_id, os.pending_disk_io_count,
ER.session_id, ER.command, ER.cpu_time, ST.text
FROM sys.dm_io_pending_io_requests ipir
INNER JOIN sys.dm_os_schedulers os ON ipir.scheduler_address = os.scheduler_address
INNER JOIN sys.dm_exec_requests AS ER ON os.scheduler_id = ER.Scheduler_id
CROSS APPLY sys.dm_exec_sql_text(ER.sql_handle) AS ST
Also, I'm not proficient with Extended Events, but I am wondering if you can create an XE session to get this information for you programmatically when the pending disk events occur.