SQL Server 2005: Select-Abfrage mit Spaltenalias bzw. Spaltenname mit Leerzeichen funktioniert nicht
-
Hallo Forum
ich habe folgende Abfrage:
SELECT [IB reference], [ID card reference], [SY reference], [Mean reference] AS mr FROM ImportantMeansList WHERE (mr = @mr)
Leider funktioniert das so nicht, da ich folgende Fehlermeldung erhalte:
unknown columnname "mr".
Wenn ich das ganze so versuche:
SELECT [IB reference], [ID card reference], [SY reference], [Mean reference] AS mr FROM ImportantMeansList WHERE ([Mean reference] = @[Mean reference])
Funktioniert es auch nicht, dann bekomme ich diese Fehlermeldung:
Must declare the scalar variable "@".
Hängt das damit zusammen dass mein Spaltenname zusammengesetzt ist mit Leerzeichen? Wenn ja, wie kann ich den Fehler umgehen? Das muss ja auch mit solchen Spaltennamen funktionieren. Muss ich das @ irgendwie in Anführungszeichen oder sowas setzen? Hab im Internet dazu leider nichts gefunden.
Danke für eure Hilfe!
-
Wer Leerzeichen, Sonderzeichen, oder gar reservierte Wörter für Spaltennamen verwendet hat selber schuld...
Was soll denn mr sein? Mit eiem @ greifst Du auf lokale Variablen zu. Diese müssen aber deklariert und zugewiesen werden. Wenn es ein Parameter sein soll, muss das mit einem : beginnen.
Also:
SELECT [IB reference], [ID card reference], [SY reference], [Mean reference] AS mr FROM ImportantMeansList WHERE ([Mean reference] = :mr) // ich weiß nicht, ob das Alias beim MS SQL Server funktioniert, musst Du ausprobieren.
-
Danke für die Hilfe. Hab meine Spaltennamen nun ohne Leerzeichen benannt und hab keine Probleme mehr. Wieder was gelernt :-).
-
Das Problem ist nicht irgendwas mit Leerzeichen o.ä., das Problem ist generell dass du versuchst IN der eigentlichen Abfrage Spalten-Aliase zu verwenden. Das geht nämlich nicht.
Du kannst aber ein sub-select verwenden:
BEGIN TRAN; CREATE TABLE #test ( [a column] INT NOT NULL PRIMARY KEY, [another column] INT NOT NULL, [yet another column] INT NOT NULL ); INSERT #test ([a column], [another column], [yet another column]) VALUES (1, 2, 3); INSERT #test ([a column], [another column], [yet another column]) VALUES (2, 5, 5); INSERT #test ([a column], [another column], [yet another column]) VALUES (3, 6, 6); INSERT #test ([a column], [another column], [yet another column]) VALUES (4, 7, 7); -- geht nicht: /* SELECT [a column] as c1, [another column] as c2, [yet another column] AS c3 FROM #test WHERE c1 > 1 -- <-- hier kannst du zwar tabellen-aliase verwenden, aber keine spalten-aliase! AND c2 < 7 -- <-- ... ORDER BY c2 DESC -- <-- ebenso ; */ -- geht: SELECT * FROM ( SELECT [a column] as c1, [another column] as c2, [yet another column] AS c3 FROM #test ) AS t WHERE c1 > 1 AND c2 < 7 ORDER BY c2 DESC ; DROP TABLE #test; ROLLBACK TRAN;