View Full Version : Wechsel auf 7.1 - .net SQL-Abfragen jetzt langsam
andreaspr@aon.at
20-11-14, 11:02
... bei abgeleiteten Feldern wird nach implizitem Regelwerk ein Typ festgelegt (ansehen kann man sich den, wenn man ein create table as (select...) macht). Das ist unasuweichlich, weil SQL streng Typgebunden ist. Sich auf implizite Regelwerke zu verlassen, ist immer schlecht, falls die nicht klar dokumentiert sind, könnten die sich ändern; besser und einfacher ist, bei erzeugten Feldern den Typ durch ein CAST zu erzwingen.
Die Auffüllerei mit Blanks ist ein Nebeneffekt von Feldern fester Länge, VARCHAR hat das Problem nicht.
Also: cast nach varchar nach TRIM.
ein Create Table as (Select Trim() ... erstellt mir ein VARCHAR Feld ... also
Zur ODBC-Definition gehört ein Set an Metadaten-Abfragen, die es übrigens auch im embedded SQL gibt.
Describe Table, Describe Statement.
Genauso gibt es im ODBC einen SQLInfo-Funktion die mir Typ und Ausprägung liefert.
Für jede SQL-Funktion sind die Parameter und Ergebnisse eben auch definiert, so ist das Ergebnis eines Trim() immer halt VARCHAR bzw. nun auch NVARCHAR bei Unicode.
Ein OLEDB/ODBC/.NET-Treiber kann nur mit den Metadaten des Systems arbeiten.
Selbständig werden da keine Daten verändert. Wenn also ein Typ CHAR(NN) geliefert wird, hat bei mir der Treiber noch nie die Blanks am Ende entfernt.
Mache ich nun einen Cast eines Char(nn) in Varchar(nn) werden Blanks auch noch nicht entfernt, da diese ja Bestandteil der Information sind. Erst ein Trim() verändern nun mal den Inhalt und liefert VARCHAR als Ergebnis, wobei die definierte Länge vom maximal Möglichen abhängt und einen Cast in VARCHAR nicht mehr erforderlich macht.
Welche Funktionen so für die Metadaten zur Verfügung stehen (bzw. als Mindestanforderungen vorhanden sein müssen) kann man in den ODBC-Spezifikationen oder z.B. im CLI-Handbuch (C-Funktionen) nachlesen. Zudem gibt es zusätzlich noch die diversen SYSxxx-Tabellen in denen man auch so einiges finden kann.