I have a very large block of SQL that I am trying to execute inside of Delphi, against a Microsoft SQL Database. I am getting this:

```
  Multiple-step OLE DB operation generated errors. 
  Check each OLE DB status value, if available. No work was done.

```

The script has multiple sql `IF` statements followed by `BEGIN` and `END` blocks with invocations of stored procedures, declaration of variables, and `EXEC` inside that. Finally it returns some of the variable values by `SELECT @Variable1 AsName1,@Variable2 AsName2...`.

The above multi-step error is coming in as an OLEException from ADO, not from the Delphi code, and happens after all the SQL exec-stored-procedure have occurred, and therefore I suspect it's firing this OLE exception when it reaches the final stage which `SELECT @Variable1 AsName1,...` to get back a few variable values for my program to see them.

I know about this retired/deprecated MS KB article, and this is unfortunately not my actual issue:

```
http://support.microsoft.com/kb/269495

```

In short that KB article says to fix a registry key and remove "Persist Security Info" from the connection string. That's not my problem. I'm asking this question because I found the answer already and I think that someone else who gets stuck here might not want to waste several hours finding potential issues when there are several that I have found after searching for solutions for several hours. Anyone who wants to add another answer with different options, is fine, and I'll select yours if it's reproducible, and if necessary I'll turn this one into a Community Wiki because there could be a dozen obscure causes for this "ADO recordset is in a bad mood and is unhappy with your T-SQL" exception.