NOT A GIT PATCH!!! (but similar)
--- a\modules\privatemsg\privatemsg.module	2012-06-20 12:04:30.000000000 -0500
+++ b\modules\privatemsg\privatemsg.module	2013-04-03 14:39:22.000000000 -0500
@@ -1041,12 +1041,18 @@
     // Query for a string with uids, for example "1,6,7". This needs a subquery on PostgreSQL.
     if (db_driver() == 'pgsql') {
       $query->addExpression("array_to_string(array(SELECT DISTINCT pmia.type || '_' || pmia.recipient
                                                           FROM {pm_index} pmia
                                                           WHERE pmia.type <> 'hidden' AND pmia.thread_id = pmi.thread_id AND pmia.recipient <> :current), ',')", 'participants', array(':current' => $account->uid));
     }
+	elseif (db_driver() == 'sqlsrv') {
+	  // The space BEFORE the "SELECT" is required because replacement happens on "(SELECT" to strip off the leading '('
+      $query->addExpression("( SELECT DISTINCT pmia.type + '_' + CAST(pmia.recipient AS NVARCHAR)
+                                                          FROM {pm_index} pmia
+                                                          WHERE pmia.type <> 'hidden' AND pmia.thread_id = pmi.thread_id AND pmia.recipient <> :current FOR XML PATH(''))", 'participants', array(':current' => $account->uid));
+    }
     else {
       $query->addExpression("(SELECT GROUP_CONCAT(DISTINCT CONCAT(pmia.type, '_', pmia.recipient))
                                      FROM {pm_index} pmia
                                      WHERE pmia.type <> 'hidden' AND pmia.thread_id = pmi.thread_id AND pmia.recipient <> :current)", 'participants', array(':current' => $account->uid));
     }
   }
@@ -1125,13 +1131,18 @@
       ->condition(db_and()
         ->condition('pmi.type', 'hidden')
         ->condition('pmi.recipient', $account->uid)
     ));
 
     // Only load recipients of messages which are visible for that user.
+	if(db_driver() == 'sqlsrv') { // THIS IS A HACK for SQL Server! This should be corrected properly by using a range in the database abstraction layer.
+		$query->where('(SELECT TOP 1 1 FROM {pm_index} pmiu WHERE pmi.mid = pmiu.mid AND pmiu.recipient = :recipient) = 1', array(':recipient' => $account->uid));
+	}
+	else {
     $query->where('(SELECT 1 FROM {pm_index} pmiu WHERE pmi.mid = pmiu.mid AND pmiu.recipient = :recipient LIMIT 1) = 1', array(':recipient' => $account->uid));
+	}
   }
   else {
     // If not, only limit participants to visible ones.
     $query->condition('pmi.type', 'hidden', '<>');
   }
 
