Dynamisches OPENROWSET in Funktion

marty1976

Neuer Benutzer
Beiträge
3
Betrifft SQL-Server 2005

Hallo zusammen,

ich habe eine Tabellenwertfunktion, die über JET / OPENROWSET Daten aus Excel importiert.
OPENROWSET nimmt nur Konstanten, aber da die Funktion für mehrere Excel-Files gelten soll, muss ich dynamisches SQL benutzen:

Code:
SET @sql1 = 'INSERT INTO @MyTable
    SELECT F2,F3,F4
    FROM '
SET @openrowset = 'OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;IMEX=1;DATABASE=\\server\xls_import\' + @filename + ''',''select * from [temp$]'') as xls'

EXEC (@sql1 + @openrowset) <-- Zeile 114

Soweit kein Problem, wenn ich dann allerdings die Funktion aufrufe bekomme ich die Meldung:

Meldung 443, Ebene 16, Status 14, Prozedur xxx, Zeile 114
Ungültige Verwendung des Operators mit Nebenwirkungen oder Zeitabhängigkeit in 'EXECUTE STRING' innerhalb einer Funktion.

Ich verstehe, das ich so also nicht vorgehen kann. Aber was wäre denn ein Workaround?

Ich dachte an eine View, die aus der Excel-Datei liest, aber auch die bekomme ich nur mit statischen Excel Dateinamen hin...

Hat jemand eine Idee, wie ich aus unterschiedlichen Excel-Tabellen mittels OPENROWSET Daten auslesen und weiterverarbeiten kann?
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Ups, mein Fehler. Schon versucht den letzten Schritt @sql1 + @openrowse nochmal auszulagern? Habe die Erfahrung gemacht das manche Funktionen nur mit einer Variable klar kommen und kein + Operation zulassen.
 
Werbung:

marty1976

Neuer Benutzer
Beiträge
3
Ich hab's mal so probiert: SET @sql2 = @sql1 + @openrowset aber das Ergebnis war das gleiche.
Eine andere Idee die ich hatte: Ich erstelle eine View auf das File und in der Funktion lese ich aus der View. Das geht, aber die View muss dann ja genau so mit OPENROWSET arbeiten, was das Problem nicht löst weil ich der View ja keine Parameter wie @filename mitgeben kann.

Innerhalb der Funktion in eine Temporäre Tabelle zu schreiben war meine nächste Idee, aber der Fehler war der gleiche...
 
Oben