Rolf b: Sql Abfrage Union

Beitrag lesen

Yupp, genau das passiert im SQL Server. Wobei es mich schon verwundert hat, dass es wie gezeigt überhaupt funktioniert hat.

Der erste SELECT erzeugt eine temporäre Table mit einer Row und Spaltennamen (View, Value). Der zweite Select verwendet andere Spaltennamen - an der Stelle hätte ich einen Fehler erwartet, dass hier Äpfel mit Birnen vermengt werden sollen - passiert aber nicht. Statt dessen hat die UNION Tabelle die Spaltennamen der temporären Tabelle.

In einem Test auf meinem SQL Server habe ich die Lage noch verschärft, indem ich die Datentypen unterschiedlich gemacht habe. Ergebnis: Die Namen kommen aus dem ersten SELECT, die Datentypen werden aus die Folge-SELECTs genommen. Wenn ich eine Tabelle mit einer INT Spalte habe und ihr per SELECT 'Huhu' as Name eine String-Zeile voranstelle, beklagt sich der Server, dass er 'Huhu' nicht verINTen könnte. Ein SELECT '123' as Name konvertiert er.

Manchmal muss man einfach die SQL Daten ein bisschen erweitern. Sei es als Sortier- oder Gruppierhilfe, oder sei es, weil ich so Defaults für die Programmlogik bereitstellen kann - ach keine Ahnung, eine konkrete Anwendung für komplett synthetische Zeilen hatte ich auch noch nicht. Unsinn würde ich deshalb nicht dazu sagen.

Rolf