2009-05-26 37 views
3

ich erfolgreich mit der folgenden Aussage zu übertreffen am Export:SQL Server Export nach Excel mit OPENROWSET

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\template.xls;', 
'SELECT * FROM [SheetName$]') 
select * from myTable 

Gibt es eine standardisierte Möglichkeit diese Vorlage zu verwenden, um einen neuen Namen für die Excel-Tabelle angeben, dass die Vorlage nie wird geschrieben oder muss ich mir etwas ausdenken?

Was ist der beste Weg, dies in der Menschen Erfahrung zu tun?

+0

Oh Glückspilz. Ich habe schon 2 Stunden damit verbracht, dies zu versuchen und alle möglichen Fehler zu bekommen. (mit 2008SP2) –

Antwort

7

Sie müssten dynamisches SQL verwenden. OPENROWSET usw. erlaubt nur Literale als Parameter.

DECLARE @myfile varchar(800) 

SET @myfile = 'C:\template.xls' 

EXEC (' 
insert into OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', 
''Excel 8.0;Database=' + @myfile + ';'', 
''SELECT * FROM [SheetName$]'') 
select * from myTable 
') 

Denken Sie daran: der Pfad zu relativ wo SQL Server

läuft
+0

das ist gut - aber ich würde immer noch die Vorlage dort an erster Stelle, so dass ich nicht mit Namen in der SQL kommen, würde ich zuerst die Tabelle erstellen müssen. – JohnIdol

+0

Ah, ich verstehe dich. Nein, Sie können Excel in T-SQL nicht so manipulieren. Vielleicht ein CLR gespeichert proc? – gbn

+0

hat nie mit CLR SPs gearbeitet - aber ich denke, es ist einfach genug - ein gutes Beispiel, um mich zum Laufen zu bringen? – JohnIdol

1

Könnten Sie nicht eine Kopie Ihrer Vorlage machen zuerst, dann den Dateinamen der Kopie übergeben in OPENROWSET?