Okay, here&#x27;s some pseudocode that drives me nuts in every one of these SQL APIs.<p>I have a Group and a list of names of persons.<p><pre><code>   Group myGroup = &quot;Groupia&quot;
   Person[] myPersons = [&quot;Foo&quot;, &quot;Bar&quot;, &quot;Baz&quot;]
</code></pre>
I want to use that to generate the following query:<p><pre><code>   SELECT * 
   FROM dbo.Person 
   WHERE name IN (&#x27;Foo&#x27;, &#x27;Bar&#x27;, &#x27;Baz&#x27;)
   AND GroupName = &#x27;Groupia&#x27;
</code></pre>
Every language that tries to do the printf-style approach <i>sucks</i> for this.  In many of these cases these are OOP languages.  How hard is it to provide an API that gives me concatenation-like semantics?<p>It would be easy to design an API to allow putting the parameter calculation with concatenation-like semantics but <i>without</i> the problems of concatenation.  For example (using Pythonic multi-line strings):<p><pre><code>    query = new query()
    query.Text = &quot;&quot;&quot;
          FROM dbo.Person 
          WHERE name IN (&quot;&quot;&quot; + query.ParamList(myPersons) + &quot;&quot;&quot;)
          AND GroupName = &quot;&quot;&quot; + query.Param(MyGroup) + &quot;&quot;&quot;
    &quot;&quot;&quot;
    resultSet = Query.Execute()
</code></pre>
or somesuch nonsense - easier still if you&#x27;re using a language that has good support for string interpolation.  No worrying about lining up your parameters with their placeholders in the string which is functionally illegible in a long query.  Good, legible programming involves keeping things that are related close to each other, so good SQL generation would logically involve having parameter&#x27;s <i>meaning</i> as close as possible to their <i>usage</i>.  printf-like syntaxes fail at this.