Mithilfe von openrowset zu Lesen, eine Excel-Datei in eine temp-Tabelle, wie kann ich auf diese Tabelle verweisen?
Ich versuche eine gespeicherte Prozedur schreiben, das Lesen einer Excel-Datei in eine temp-Tabelle, dann massieren Sie einige der Daten in der Tabelle, dann fügen Sie die ausgewählten Zeilen aus der Tabelle in eine permanente Tabelle.
So, es beginnt so:
SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="+@file+";HDR=YES', 'SELECT * FROM [Sheet1$]')"
EXEC (@SQL)
Dass viel, scheint zu funktionieren.
Wenn ich dann allerdings versuchen, so etwas wie dieses:
Select * from #mytemptable
Bekomme ich eine Fehlermeldung:
Ungültiger Objektname '#mytemptable'
Warum nicht #mytemptable erkannt? Gibt es eine Möglichkeit zu haben #mytemptable zugänglich, um den rest der gespeicherten Prozedur?
Vielen Dank im Voraus!
InformationsquelleAutor mattstuehler | 2009-05-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe keine Zeit, zu verspotten, so dass ich weiß nicht, ob es wird funktionieren, aber versuchen, das aufrufen der Tabelle '##mytemptable' anstelle von '#mytemptable'
Ich vermute, dein Problem ist, dass Ihre Tabelle ist nicht im Umfang mehr, nachdem Sie exec() der sql-string. Temp-Tabellen vorangestellt sind zwei Pfund Symbole sind Global zugänglich.
Vergessen Sie nicht, es fallen zu lassen, wenn Sie damit fertig sind!
Ja, Sie werden kollidieren, so haben Sie zu kommen mit einem Weg, um dies zu vermeiden, und leider, ich habe nicht viel gute Ratschläge, wie das zu tun. Ich verstehe, dass Sie brauchen, um exec (), der string, denn du bist zu verketten, die mit dem Namen in der Abfrage, aber ist das wirklich notwendig? Wenn Sie es vermeiden können, dann ist es nicht ein Problem, weil Sie die Abfrage ausführen können, ohne exec() und kehren Sie zu einer lokal gültigen temp-Tabelle. In meiner Erfahrung, exec()ing Saiten führt immer zu Schmerz an einem gewissen Punkt. 🙂
Lunchy - nochmals vielen Dank. Leider bin ich mir nicht sicher, wie Sie umgehen mit der exec(), da der Dateiname immer anders sein wird. Mit einem Global temp-Tabelle ist auch ein no-go, da es möglich ist, dass mehr als ein Benutzer rufen Sie diese gespeicherte Prozedur zur gleichen Zeit. Ich habe auch als die Verwendung einer Tabellenvariablen anstelle von temporären Tabellen, aber I dont' want to definieren Sie die Struktur der Tabelle im Voraus - ich will, dass dynamisch sein, und kommen aus der Excel-Tabelle. So, wieder auf Platz 1, denke ich...
InformationsquelleAutor Casey Williams
Den Weg, ich habe dies in der Vergangenheit getan wurde:
Erstellen Sie zunächst die #temp_table mit CREATE TABLE.
Zweitens, bauen die dynamische Abfrage dann wie gewohnt einfügen in die #temp_table
Dritte, mit exec sp_executesql @sql.
Mit dieser Methode werden Sie nicht brauchen, die Global ##temp_table.
InformationsquelleAutor PPC-Coder
Können Sie es in gleichem Umfang auch für das ganze Skript in der dynamischen Abfrage:
InformationsquelleAutor David Aleu