Announcement

Collapse
No announcement yet.

Zugriff auf Temporäre Tabellen SQL 2005

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Temporäre Tabellen SQL 2005

    Hallo,

    ich erstelle in meiner Anwendung temporäre Tabellen. Erstellen und füllen klappt. Nur wenn ich mittels <B>"SELECT * FROM #TEMP.. </B> auf die Tabelle zugreifen will wird die Tabelle nicht gefunden, da sie durch den SQL-Server mit einer <B>___123456</B> vervollständigt wird.
    Gibt es eine Möglichkeit die Erweiterungen auszuschalten und direkt auf die temprären Tabellen zuzugreifen.

    Andre Andre

  • #2
    Hallo Andre,

    eigentlich "vervollständigt" der SQL Server keine Tabellennamen, auch nicht von temporären Tabellen; so "sehen" sie nur in SysObjects aus.

    - Wie erstellst Du die Tabelle genau (Statement)?
    - Greifst Du in der gleichen Session auf die Temp-Tabelle wieder zu? Falls nicht, probier es mit einer Global-Temporären Tabelle (##).

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Olaf,

      Ich greife immer in der gleichen Session auf die Tabellen zu.
      Die Tabellen werden entweder über <B>"Select INTO #Temp_Tabelle_Name .."</B> oder auch mittels <B>"CREATE TABLE #Temp_Tabelle_Name .."</B> erstellt

      Comment


      • #4
        Hallo,
        eine temporäre Tabelle wird <b>nicht</b> in der Benutzerdatenbank angelegt, sondern generell in der Systemdatnbank <b>tempdb</b>. Da verschiedene Datenbanksessions mehrere temporäre Tabellen mit dem gleichen Namen anlegen dürfen, muss der SQL Server hinter den Kulissen den Namen des Datenbankobjekts mit einer Session-Kennzeichnung erweitern. Dies ist jedoch völlig transparent, in SQL wird immer nur der "kleine" Name (ohne die Erweiterung) verwendet. Das folgende Beispiel demonstriert dies:

        <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">USE </span>DatenbankX</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>#tempTbl</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; id&nbsp;&nbsp; <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">NOT NULL IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; wert <span style="color: blue;">VARCHAR</span>(9) <span style="color: blue;">NOT NULL DEFAULT </span><span style="color: maroon;">'Test'</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>#tempTbl <span style="color: blue;">DEFAULT VALUES</span>;</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- Weg 1: Der SQL Server mappt die Tabelle automatisch auf tempdb</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>* <span style="color: blue;">FROM </span>#tempTbl</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- Weg 2: Vollständig qualifizierter Tabellenname</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>* <span style="color: blue;">FROM </span>tempdb.dbo.#tempTbl</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- Beweis 1: temp. Tabelle ist in der Benutzerdatenbank nicht vorhanden</span></p><p style="margin: 0px;">sp_help <span style="color: maroon;">'#tempTbl'</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: green;">-- Beweis 2: temp. Tabelle wird in der Systemdatenbank tempdb angelegt</span></p><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">sp_help <span style="color: maroon;">'#tempTbl'</span></p></div>

        Beim Zugriff auf die temporäre Tabelle ist man nur dann immer auf der sicheren Seite, wenn der vollständig qualifizierte Namen (<i>tempdb.Eigentümer.Tabellename</i>) verwendet wird

        Comment


        • #5
          Hallo Andreas,

          Danke für die Hilfe. Mein Problem war, dass ich nicht den vollständigen qualifizierten Namen genutzt habe.

          Gruß Andr

          Comment

          Working...
          X