itrain-home BASTA! Spring 2012  
home
 Aktuelle Seite:  knowhow sql transfer export xls _exportexcelmitadox.asp 
 



 

Transact SQL Script: _ExportExcelmitADOX.SQL

questions? mailto:info@itrain.de

Download SQL Script

Dieses Script dient nur Demonstrationszwecken. Verwendung des Scripts erfolgt auf eigene Gefahr.


DECLARE @pfad varchar(255)  
 SET @pfad = 'D:\'  
 DECLARE @hr int             -- Returncode der sp_OA... Aufrufe  
 DECLARE @katalog int        -- Objektvariable für ADOX.Catalog  
 DECLARE @verbindung int     -- Objektvariable für ADO.Connection  
 DECLARE @dbname varchar(255) -- Name der temporären Access-Datenbank  
 DECLARE @conString varchar(512)  -- Verbindungszeichenfolge für Access-Datenbank  
 DECLARE @quelle varchar(255)       -- Hilfsfeld für Fehlerbehandlung  
 DECLARE @beschreibung varchar(255)      -- Hilfsfeld für Fehlerbehandlung  
 DECLARE @dummy int              -- Dummy Output Parameter  
 DECLARE @Excel_Mappe varchar(255)  -- Vollständiger Name der Ziel Excelmappe  
 DECLARE @tabelle varchar(255)      -- Name der zu exportierenden Tabelle  
 DECLARE @besitzer varchar(255)     -- Besitzer der zu exportierenden Tabelle  
 DECLARE @exec varchar(4000)        -- Hilfsvariable für dynamische Ausführungen  
   
 -- Cursor zum Ermitteln aller Tabellen ohne Text- und Image-Spalten  
 DECLARE curTabellen CURSOR FAST_FORWARD FOR   
  SELECT t.TABLE_SCHEMA, t.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES t  
  WHERE TABLE_TYPE = 'BASE TABLE'  
  AND NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS  
     WHERE DATA_TYPE IN ('text', 'ntext',  'image')  
     AND TABLE_CATALOG = t.TABLE_CATALOG AND  
           TABLE_SCHEMA = t.TABLE_SCHEMA AND  
                              TABLE_NAME = t.TABLE_NAME)  
    ORDER BY TABLE_NAME  
   
 -- Erzeugen eines ADOX-Katalog Objekts  
 EXEC @hr = master.dbo.sp_OACreate 'ADOX.Catalog', @katalog OUTPUT  
 IF @hr <> 0  -- Fehlerbehandlung  
  BEGIN  
   EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT  
   RAISERROR ( 'Fehler beim Erstellen des ADOX.Catalog Objekts: %s', 10 , -1, @beschreibung)  
  END  
   
 -- Zufälliges Erzeugen eines Datenbank-Namens  
 SET @dbname = @pfad +  CAST(newid() AS varchar(100)) + '.MDB'  
 -- Erstellen der Verbindungszeichenfolge  
 SET @conString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + @dbname  
   
 -- Erstellen einer neuen (leeren) Access-Datenbank  
 -- Dieser Schritt ist notwendig, da nur über eine Verbindung zu einer Access-Datenbank  
 -- die benötigte Jet-Funktionalität zur Verfügung steht  
 EXEC @hr = master.dbo.sp_OAMethod @katalog, 'Create',   
          @dummy output,  
         @conString  
 IF @hr <> 0  -- Fehlerbehandlung  
  BEGIN  
   EXEC sp_OAGetErrorInfo @katalog, @quelle OUTPUT, @beschreibung OUTPUT  
   RAISERROR ( 'Fehler beim Erstellen der Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)  
  END  
   
 -- Variable @verbindung auf die Eigenschaft "ActiveConnection" des Katalog-Objekts setzen  
 EXEC @hr = master.dbo.sp_OAGetProperty @katalog, 'ActiveConnection', @verbindung OUTPUT  
 IF @hr <> 0  -- Fehlerbehandlung  
  BEGIN  
   EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT  
   RAISERROR ( 'Fehler beim Zugriff auf Access-Datenbank %s: %s', 10 , -1, @dbname, @beschreibung)  
  END  
   
 -- Öffnen des Cursors und Export für alle gefundenen Tabellen durchlaufen  
 OPEN curTabellen  
 FETCH NEXT FROM curTabellen INTO @besitzer, @tabelle  
 WHILE @@FETCH_STATUS = 0  
 BEGIN  
  -- Dynamisches Erzeugen der SELECT INTO Anweisung  
  SET @exec = 'SELECT TOP 65535 * INTO [Excel 8.0;Database=' + @pfad + db_name() + '.xls].[' + @besitzer + '_' + @tabelle + '] FROM [ODBC;Driver=SQL Server;Database=' + DB_NAME() + ';Server=' + @@SERVERNAME + ';Trusted_Connection=Yes;].[' + @besitzer + '.' + @tabelle + ']'  
  EXEC @hr = master.dbo.sp_OAMethod @verbindung, 'Execute', @dummy output, @exec  
  IF @hr <> 0  -- Fehlerbehandlung  
   BEGIN  
    EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT  
    RAISERROR ( 'Fehler beim Export: (%s): %s', 10 , -1, @exec, @beschreibung)  
   END  
  FETCH NEXT FROM curTabellen INTO @besitzer, @tabelle  
 END  
   
 -- "Aufräumarbeiten"  
 CLOSE curTabellen  
 DEALLOCATE curTabellen  
   
 EXEC @hr = master.dbo.sp_OAMethod @verbindung, 'Close'  
 IF @hr <> 0  -- Fehlerbehandlung  
   BEGIN  
    EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT  
    RAISERROR ( 'Fehler beim Schliessen der Verbindung zur Access-Datenbank:  %s', 10 , -1,  @beschreibung)  
   END  
 EXEC @hr = master.dbo.sp_OADestroy @verbindung  
 IF @hr <> 0  -- Fehlerbehandlung  
   BEGIN  
    EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT  
    RAISERROR ( 'Fehler beim Zerstören des ADO-Connection Objekts:  %s', 10 , -1,  @beschreibung)  
   END  
 EXEC @hr = master.dbo.sp_OADestroy @katalog  
 IF @hr <> 0  -- Fehlerbehandlung  
   BEGIN  
    EXEC sp_OAGetErrorInfo @verbindung, @quelle OUTPUT, @beschreibung OUTPUT  
    RAISERROR ( 'Fehler beim Zerstören des ADO-Connection Objekts:  %s', 10 , -1,  @beschreibung)  
   END  
 -- Temporäre Access-Datenbank löschen  
 SET @exec = 'DEL ' + @dbname  
 EXEC master.dbo.xp_cmdshell @exec ,NO_OUTPUT  
 
Leerraum

Dokument zum Drucken anzeigen
English Pages
Link-Tipp zum Thema "DHTML": www.devx.com/projectcool/developer/Default.asp

Viele Artikel, Links zu .Net, VB, SQL Server, und und und...