So what happened here? When you execute a query against SQL Server, both your data and some additional information is sent back to the client. This additional information is sent via a separate channel which is accessible via the
SqlConnection.InfoMessages(or if you’re still using classic ADO, the
InfoMessage) event. When you run queries in SSMS, you see this information in the Messages tab of the results pane most often as
X row(s) affected.
That’s where my new stored procedures were causing problems. Where the original procedures were returning only one event which corresponded to the number of records returned by the single query in each procedure. But now that I’m loading temp tables, I’m getting multiple messages back – at a minimum, a count of the records affected when loading the temp table plus a count of the records returned to the calling application.
Data layers which can’t handle information streams are rare, but they do show up in the wild sometimes.