Frage

Wir haben vor kurzem hatten einige Arbeit mit Openedge-Datenbank, die ein Drittprodukt verwendet, und heute zu tun (nach vielen Haareziehen), wir schließlich identifiziert, warum eine Ansicht keine Ergebnisse zurückkehren. Diese Ansicht in Frage vereint etwa 100 getrennte Tabellen, und wird dann abgefragt gegen (wir haben Rechte auf diese Datenbank begrenzt). Eine der von dieser Ansicht zurück Felder ist eine hartcodierte Stringliteral, entlang der Linien von

'John Smith' AS TheName

Wir hatten Schwierigkeiten das Ausführen von Abfragen, die diese Zeichenfolge enthalten, die wir RTrim versuchten (die Ansicht zurück viel Leerzeichen) und dann mit einem anderen Feld verketten. Wenn wir jedoch RTrim auf diesem Gebiet verwenden dann, stattdessen eine Fehlermeldung zurückzugeben, oder eine Null oder so ähnlich wurde die Reihe einfach nicht zurückgegeben. Wir haben nicht versucht, es in einer WHERE-Klausel zu verwenden oder JOIN, das war einfach ein Teil der SELECT ... FROM VIEWNAME. Nach der Ansicht der Überprüfung, so schien es, dass die Ansicht, die die Länge der Zeichenfolge als 9 Zeichen fälschlicherweise hatte erkannt (keine Länge in der Definition angegeben wurde) und RTrim hat einfach nicht funktioniert. Nun könnte ich verstehen, warum dies zu einer Fehlermeldung führen kann, oder einen NULL-Wert in den SELECT, aber Warum sollte die Reihe einfach nicht an alle zurückgegeben werden? Dies scheint nicht wie gutes SQL-Verhalten, und ich habe es nie mit einem anderen RDBMS geschehen gesehen.

Weitere Informationen: Wir sind Testabfrage über ODBC und WinSQL, mit Blick auf dieses Wesen in einer bestehenden ASP.NET App enthalten. Wir haben keinen Zugriff auf das Backend außer über das, obwohl wir Rechte haben, um Ansichten zu erstellen.

Update: Als ausgeflippt Follow-up haben wir nun entdeckt, dass, wenn wir diese Ansicht ohne WHERE-Klausel zur Abfrage versuchen, werden keine Datensätze zurückgegeben. Dies kann die gleiche Ursache hat.

War es hilfreich?

Lösung

Das klingt wie es um die SQL-WIDTH innerhalb der Fortschritt Datenbank zusammenhängen könnte. Ein Problem bei dem Fortschritt ist, dass, wenn der Inhalt des Feldes überschreitet den SQL-WIDTH dann werden Sie seltsames SQL Verhalten bekommen (manchmal der Fahrer kann fehlschlagen, eine anderes Mal Sie keine Ergebnisse erhalten).

Um dies zu identifizieren müssen den dbtool Befehl verwenden, um SQL-Breite zu überprüfen, die nicht überschritten werden kann.

Andere Tipps

Stellen Sie sicher, dass Sie keine Leerzeichen enthalten. Trimming nicht entfernt Rohlingen nur Leerzeichen. Blanks sind auch nicht NULL-Werte. Es gibt einen Unterschied im Zeichensatz, während es nicht sichtbar anders in Ihrem Editor. Ich habe in diese mit ein paar Datenbanken laufen, DBII, Oracle, PostgreSQL. Überprüfen Sie den Zeichensatz der Editor und versuchen, die Tabellen sehen, könnte man nichts sehen oder Sie könnten große Rechtecke sehen.

Das klingt sehr seltsames Verhalten. Nur Code um ihn herum, tut die Verkleidung und / oder String-Manipulation in der Anwendung und geht auf dem Weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top