Fragensteller
Use a @variable Column name in Select statement on SQL server 2008

Allgemeine Diskussion
-
I would like to select a value from a table using the Column name AS A VARIABLE !
eg
DECLARE @spalte as varchar(10)
SET @spalte = 'Ecomp'
SELECT @spalte FROM dbo.MATDATA WHERE 2>= tmin AND 2<=tmax AND 1 = MatCode
When I try to do this I only get 'Ecomp' back, not the expected value.
Any Idea?
Regards SLCPPH
- Typ geändert Alex Pitulice Freitag, 14. Oktober 2011 10:10 Warten auf Feedback
Alle Antworten
-
Hallo,
da dies ein de-DE Forum ist und da Du Deine Variable "Spalte" genannt hast, nehme ich mal an, das Du auch DE sprichst.
Also, so geht es nicht, das könntest Du nur mit dynamischem SQL hin bekommen, z.B. so:
DECLARE @sql nvarchar(500); SET @sql = 'SELECT ' + @spalte + ' FROM dbo.MATDATA 2 >= tmin and 2 <= tmax and 1 = MatCode' EXEC @sql
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo Olaf!
DECLARE @sql nvarchar(500);
DECLARE @spalte varchar(2)
SET @spalte = 'LC'
SET @sql = 'SELECT ' + @spalte + ' FROM [Stackhoover].dbo.D100601_LCDEF
WHERE ' + @spalte + '=501'
EXEC @sqlERGIBT:
The name 'SELECT LC FROM [Stackhoover].dbo.D100601_LCDEF WHERE LC=501' is not a valid identifier.
Hat die Methode (abgesehen davon das sie gerade noch nicht läuft) irgendwelche Nachteile?
Grüße,
SLCPPH
- Bearbeitet SometimesLearningCPPHurts Freitag, 7. Oktober 2011 16:15
-
Hallo,
genau, in eine Function kannst Du den Aufruf nicht verwenden; eine Function muss immer deterministisch sein und immer ein gleichförmiges Ergebnis liefern, was bei unterschiedlichen Spalten und ggf Datentypen nicht gegeben wäre.
Es hängt nun davon ab, wieviele Spalten es sind. Wenn es nur ein paar wenige sind, könntest Du per CASE Anweisung eine Fallunterscheidung durchführen und das Ergebnis der entsprechenden Spalte zurückliefern; nach Konvertierung in einen definierten Datentypen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo,
kann es sein, das Du Dein letztes Post vollständig geändert hattest; ich hatte auf die erste Version geantwortet und jetzt sieht das etwas zusammenhanglos aus ....
Sorry, ich hatte beim SQL Statement das sp_executesql vergessen; so geht es:
DECLARE @sql nvarchar(500); SET @sql = 'SELECT ' + @spalte + ' FROM dbo.MATDATA 2 >= tmin and 2 <= tmax and 1 = MatCode' EXEC sp_executesql @sql;
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing