Itgencmr115: The number of columns from an SQL action statement must be exactly one

Bij het gebruik van Invantive UniversalSQL kan een foutmelding optreden:

itgencmr115
The number of columns from an SQL action statement must be exactly one instead of …
Select exactly one column in the SQL action statement.

Wat betekent de melding itgencmr115?

De melding komt voor in Invantive Data Hub, Invantive Query Tool en Invantive Control for Excel. In plaats van de puntjes staat het aantal kolommen dat de instructie teruggaf.

Een SQL action statement is een instructie waarvan het product alleen de uitkomst wil en geen tabel met rijen. In Invantive Data Hub en Invantive Query Tool zijn dat statements die beginnen met insert, update, delete, set of use. In Invantive Control for Excel krijgen de triggers van een model of blok dezelfde behandeling.

Het product leest de uitkomst als een tabel met precies één kolom en hooguit één rij. Dat ene veld wordt als geheel getal gelezen. Het is het aantal geraakte rijen of een resultaatcode. Een tabel zonder rijen telt als 0.

Twee verwante meldingen horen bij dezelfde controle. De eerste gaat over het aantal rijen. De instructie gaf meer dan één rij:

itgencmr114
The number of rows from an SQL action statement must be either zero or one instead of …
Select at most one row in the SQL action statement.

De tweede gaat over het ontbreken van een resultaat. De instructie gaf geen resultaat:

itgencmr116
Both columns and rows must be returned from an SQL action statement.
Use a statement that returns one column, such as a SELECT statement.

Oorzaken

Mogelijke oorzaken zijn:

  • De SQL-instructie geeft meer dan één kolom terug.
  • De SQL-instructie geeft meer dan één rij terug.
  • De SQL-instructie geeft geen resultaat terug.
  • De SQL-instructie is bedoeld als gewone query, maar wordt als SQL action statement uitgevoerd. Dat kan bij de SQL van een trigger in Invantive Control for Excel.

Oplossing

De volgende stappen kunnen het probleem oplossen:

  1. Bepaal welke van de drie meldingen optreedt. Bij kolommen en rijen noemt de melding het gevonden aantal.
  2. Pas de instructie aan, zodat die één kolom en hooguit één rij teruggeeft. Kies voor die kolom een waarde die als geheel getal te lezen is.
  3. Bij een trigger in Invantive Control for Excel: pas de SQL van die trigger aan in het model of het blok van de Microsoft Excel-werkmap.

De volgende instructie geeft twee kolommen terug en wordt geweigerd:

select rge.value a, rge.value b from range@datadictionary(1) rge

De volgende instructie geeft twee rijen terug en wordt geweigerd:

select rge.value a from range@datadictionary(2) rge

De volgende instructie geeft één kolom en één rij terug en voldoet:

select rge.value a from range@datadictionary(1) rge

Een vraag stellen op het forum

Lukt het niet om het probleem op te lossen, dan kan een vraag worden gesteld in de categorie Vragen van dit forum.

Een vraag is goed te beantwoorden met de volgende gegevens:

  • de foutcode van de melding;
  • het tijdstip in UTC met de tijdzone erbij;
  • het product, Invantive Data Hub, Invantive Query Tool of Invantive Control for Excel, met de versie;
  • de tekst van de melding;
  • de stappen die al zijn geprobeerd.

De tekst van de instructie helpt bij het beantwoorden. Klantgegevens horen er niet in.