TOP Abfrage mit AS

Squall_Titus

Benutzer
Beiträge
13
Ich brauche eine Lösung um Name zu maskieren (z.B. als Name_Temp) mit der Abfrage: SELECT TOP (5) Name bekomme ich als Spaltennamen Name ich brauche aber unbedingt etwas anderes als Name, da er mir sonst eine Variable überschreibt.
Die Möglichkeiten mit SELECT (TOP (5) Name) AS Name_Temp oder nur SELECT TOP (5) Name AS Name_Temp funktionieren nicht.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.736
Ich brauche eine Lösung um Name zu maskieren (z.B. als Name_Temp) mit der Abfrage: SELECT TOP (5) Name bekomme ich als Spaltennamen Name ich brauche aber unbedingt etwas anderes als Name, da er mir sonst eine Variable überschreibt.
Die Möglichkeiten mit SELECT (TOP (5) Name) AS Name_Temp oder nur SELECT TOP (5) Name AS Name_Temp funktionieren nicht.

Geht es als Subselect? select name as name_temp from (select top(5) from ...) foo ?

Ich nix M$SQL, falls das jetzt Bullshit ist nicht hauen ...
 

Squall_Titus

Benutzer
Beiträge
13
Die Abfrage geht nur auf dem SQL-Server direkt.

Ich verwende aber ein Programm, welches mir die Anfrage erst parst. (Geht nicht anders)
Und da kommt ein Syntax Fehler direkt beim AS.
 

ukulele

Datenbank-Guru
Beiträge
4.702
Uh das sollte man natürlich schon erwähnen. Du musst also deinen Parser austricksen. Wenn du glück hast, reicht er Subselects 1:1 an die DB weiter also in etwa so:
Code:
SELECT    Name_Temp
FROM    (    SELECT    TOP (5) Name AS Name_Temp
            FROM    tabelle ) t1
Wenn nicht hilft nur rumprobieren oder jemanden Fragen der sich mit dem Parser auskennt. Wie heißt denn das Programm wenn man fragen darf?
 

ukulele

Datenbank-Guru
Beiträge
4.702
PS: Alternativ könnte man sich direkt in der DB eine Sicht anlegen die den kompletten Select abbildet und im Programm nur die Sicht abfragen.
 

Squall_Titus

Benutzer
Beiträge
13
Das Programm heißt BPM InSpire (für Großprojekte auf Java-Basis) und übersetzt mir meine Abfragen in die Zielsprache.
Das mit dem Trick habe ich probiert, aber mein Parser ist da ziemlich penibel und lässt so etwas nicht durchgehen.
 

ukulele

Datenbank-Guru
Beiträge
4.702
Läßt er dich auf eine andere Tabelle zugreifen? Dann sollte das mit der Sicht klappen und wäre vermutlich auch die eleganteste Variante.
 

Squall_Titus

Benutzer
Beiträge
13
Ja der Weg mit der Sicht funktioniert zwar, aber das Problem ist, das ich dann für jeden Kunden ein entsprechendes SQL-Update anbieten muss, damit die die Sichten auch haben..
 

ukulele

Datenbank-Guru
Beiträge
4.702
Ansonsten fällt mir nicht mehr viel ein ausser es irgendwie im Subquery zu verstecken, eventuell noch mit einen JOIN der selben Tabelle oder irgendeine Form der Verschachtelung:
Code:
SELECT    TOP (5) t1.id,
        t2.Name_Temp
FROM    tabelle t1
LEFT JOIN (    SELECT    id,
                    Name AS Name_Temp
            FROM    tabelle ) t2 ON t1.id = t2.id
Warscheinlich stört er sich aber an AS als Schlüsselwort und wird es unter keinen Umständen anwenden. Mit EXEC wird er sicher auch nölig:
Code:
EXEC('SELECT    TOP (5) Name AS Name_Temp FROM tabelle')
Da wäre ein DB Update mit View noch das kleinere Übel aus meiner Sicht denn die Lösung ist sicherlich die eleganteste aus technischer Sicht. Es sei denn es läßt sich am Paser was machen oder machen lassen das dieser Spaltenaliase unterstützt.
 
Werbung:

Squall_Titus

Benutzer
Beiträge
13
Danke für die Antworten, aber ich habe eine einfachere Lösung gefunden.
Ich habe mir einen RepeatContainer gebaut und unterbreche die Wiederholung nach 5 Aufrufen.
Dadurch bin ich wieder DB-Format unabhängig und muss nicht hacken.
Des weiteren habe ich von den Entwicklern erfahren, das mann solche spezifischen Anweisungen auch maskieren kann der Form SELECT /*+TOP (5)*/ ...... AS ...... (kommt von ORACLE hints) was mir für zukünftige Dinge sicherlich zugute kommen wird.
 
Oben