BizTalk Server WCF-SQL adapter error: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

  • Sandro Pereira
  • Aug 28, 2024
  • 3 min read

Welcome back to another blog post on the saga of BizTalk Serve errors and warnings, causes and solutions. This morning started off excitingly as I had to go investigate an issue in one of our current BizTalk Server projects. The curious thing about this error, and I encounter many types of errors using the SQL adapter, is that I had never encountered.

System.Data.SqlClient.SqlException (0x80131904): Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

Server stack trace:
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult

At first glance, this does not appear to be a BizTalk Server issue but rather a SQL-side issue.

Cause

This is indeed an SQL Server issue, and you cannot do anything from the BizTalk Server side.

If you get this error message: Subquery returned more than 1 value… in SQL Server, it’s because you’re using a subquery that returns more than one value in a scenario where this is not allowed. And, of course, the solution to this will depend on what you’re trying to do in the query.

Solution

As a BizTalk Server developer or administrator, you need to speak with the SQL team to fix the SQL query.

As an example, if you have a query that faces this issue, like this demo sample:

SELECT * FROM MyTable 
WHERE myColumn = (SELECT myOtherColumn FROM MyOtherTable);

Again, the solution to this will depend on what you’re trying to do in the query, but these are some options for resolving this issue:

Using the IN operator

SELECT * FROM MyTable 
WHERE myColumn IN (SELECT myOtherColumn FROM MyOtherTable)

Using the EXIST operator

SELECT * FROM MyTable t
WHERE EXISTS IN (SELECT * FROM MyOtherTable ot WHERE ot.myOtherColumn = t.myColumn);

Keeping the = operator and changing the subquery

SELECT * FROM MyTable 
WHERE myColumn = (SELECT myOtherColumn FROM MyOtherTable WHERE column = something);

I hope you find this helpful! If you liked the content or found it useful and want to help me write more, you can buy (or help me buy) my son a Star Wars Lego! 

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community.

Leave a Reply

Your email address will not be published. Required fields are marked *

The Ultimate Cloud
Management Platform for Azure

Supercharge your Azure Cost Saving

Learn More
Turbo360 Widget

Back to Top