To my knowledge, the only way to send results that did not originate from the context connection is to build a new result set metadata object and then send the rows up one at a time.
Something like:
private static void sendResultsetRecords(SqlDataReader dataReader)
{
SqlMetaData[] meta = createMetaDataForResultset(dataReader);
SqlContext.Pipe.SendResultsStart(new SqlDataRecord(meta));
sendEachRecordOfData(dataReader, meta);
SqlContext.Pipe.SendResultsEnd();
}
You can find the complete implementation in the tSQLt.ResultsetFilter method that is part of the tSQLt database unit testing framework for SQL Server.
The relevant code starts at line 56 of this file: http://sourceforge.net/p/tsqlt/code/HEAD/tree/tSQLtCLR/tSQLtCLR/ResultSetFilter.cs#l56