Benutzer mit den meisten Antworten
Tabellenvariable

Frage
-
Hallo,
ich bin etwas verwirrt, ob es Bug oder Feature ist.
Ich deklariere eine Tabellenvariable:
declare @tpreis table (artnr varchar(20), Bezeichnung varchar(50), Groesse int, ek money, vk7alt money, vk money, vgl money)
Dann mache ich einen insert. Der klappt ganz normal.
Schließlich möchte ich in einem Select auf die Spalten zugreifen
Select @tpreis.artnr ....
Da steigt er mit dem Fehler "Die @tpreis-Skalarvariable muss deklariert werden." aus.
Schreibe ich nur select artnr.... , dann kompiliert er. Das ist nur etwas suboptimal, wenn ich gleiche Spaltennamen auch in anderen Tabellen verwende. Gibt es einen Trick, außer die Spalten eineindeutig zu benennen?
Gruß Ulf
- Bearbeitet ufl Donnerstag, 13. Oktober 2011 15:45
Antworten
-
Hallo Ulf,
eine Tabellenvariable verwendet man wie eine normale Tabelle und auch hier kannst Du zur Vereinfachung auch eine Alias verwenden; gleiches Prinzip:
Select T.artnr FROM @tpreis AS T INNER JOIN TabelleX ASS X ...
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- Als Antwort markiert ufl Donnerstag, 13. Oktober 2011 18:37
Alle Antworten
-
Hallo Ulf,
eine Tabellenvariable verwendet man wie eine normale Tabelle und auch hier kannst Du zur Vereinfachung auch eine Alias verwenden; gleiches Prinzip:
Select T.artnr FROM @tpreis AS T INNER JOIN TabelleX ASS X ...
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- Als Antwort markiert ufl Donnerstag, 13. Oktober 2011 18:37
-
Okay, das mit dem Alias ist also ein Workaround. Das hatte ich noch nicht probiert. Aber eine normale Tabelle kann ich mit tabelle.feld ansprechen. Das klappt hier nicht. Nun gut. Belassen wir es dabei und verbuchen es unter Feature. Einen schönen Abend Ulf
-
Es ist ein dokumentiertes Feature:
http://msdn.microsoft.com/de-de/library/ms175010.aspxAußerhalb einer FROM-Klausel muss ein Alias für Verweise auf table-Variablen verwendet werden, wie im folgenden Beispiel gezeigt wird:
SELECT EmployeeID, DepartmentID FROM @MyTableVar m JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND m.DepartmentID = Employee.DepartmentID)
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu