1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Dynamisches OPENROWSET in Funktion

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von marty1976, 18 Juli 2011.

  1. marty1976

    marty1976 Neuer Benutzer

    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?
     
  2. ukulele

    ukulele Datenbank-Guru

    Wofür ist denn das + '' am Ende von @openrowset, müsste da nicht eine ) rein?
     
  3. marty1976

    marty1976 Neuer Benutzer

    Die Zeile endet nicht bei @filename + da musst Du scrollen...
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. marty1976

    marty1976 Neuer Benutzer

    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...
     
Die Seite wird geladen...

Diese Seite empfehlen