Ich habe eine Excel-Tabelle, die ausgewählte Spalten in meine SQL Server 2008-Datenbanktabelle importieren soll. Der Assistent bot diese Option nicht an.
Gibt es einfache Code-Optionen?
Sobald Sie mit der SQL Server 2005-Datenbank verbunden sind, klicken Sie mit der rechten Maustaste im Objekt-Explorer-Fenster auf die Datenbank, in die Sie die Tabelle importieren möchten. Wählen Sie Aufgaben -> Daten importieren ... aus. Dies ist ein einfaches Werkzeug, mit dem Sie die eingehenden Daten in die entsprechende Tabelle einfügen können.
Microsoft schlägt vor mehrere Methoden:
Wenn der Assistent (DTS) nicht funktioniert (und ich denke, er sollte es tun), könnten Sie Folgendes versuchen http://www.devasp.net/net/articles/display/771.html , was im Grunde vorschlägt, dies zu tun so etwas wie
INSERT INTO [tblTemp] ([Column1], [Column2], [Column3], [Column4])
SELECT A.[Column1], A.[Column2], A.[Column3], A.[Column4]
FROM OPENROWSET
('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\Excel.xls;HDR=YES', 'select * from [Sheet1$]') AS A;
Das hört sich vielleicht nach einem langen Weg an, aber Sie möchten vielleicht mit Excel INSERT SQL-Code generieren, den Sie in Query Analyzer einfügen können, um Ihre Tabelle zu erstellen.
Funktioniert gut, wenn Sie die Assistenten nicht verwenden können, da sich die Excel-Datei nicht auf dem Server befindet
Sie könnten OPENROWSET verwenden, etwa:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;HDR=NO;DATABASE=C:\FILE.xls', 'Select * from [Sheet1$]'
Stellen Sie nur sicher, dass es sich bei dem Pfad um einen Pfad auf dem Server handelt, nicht um Ihren lokalen Computer.
go
sp_configure 'show advanced options',1
reconfigure with override
go
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure with override
go
SELECT * into temptable
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Documents and Settings\abhisharma\Desktop\exl\ImportExcel2SQLServer\ImportExcel2SQLServer\example.xls;IMEX=1',
'SELECT * FROM [Sheet1$]')
select * from temptable
Eine andere Option besteht darin, VBA in Excel zu verwenden und ein Makro zu schreiben, um die Tabellendaten zu analysieren und in SQL zu schreiben.
Ein Beispiel ist hier: http://www.ozgrid.com/forum/showthread.php?t=26621&page=1
Sub InsertARecord()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stCon As String, stSQL As String
Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset
stCon = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=JOEY"
cnt.ConnectionString = stCon
stSQL = "INSERT INTO MyTable (Price)"
stSQL = stSQL & "VALUES (500)"
cnt.Open
rst.Open stSQL, cnt, adOpenStatic, adLockReadOnly, adCmdText
If CBool(rst.State And adStateOpen) = True Then rst.Close
Set rst = Nothing
If CBool(cnt.State And adStateOpen) = True Then cnt.Close
Set cnt = Nothing
End Sub
Wenn Sie ein visuelles Tool mit Desktop-Oberfläche einschließlich Validierung wünschen, können Sie dieses Excel-Tool gut finden. Sie können das Tool auch zum Erstellen von Datenbearbeitungsaufgaben für mehrere Benutzer verwenden oder sogar Daten aus einer beliebigen Quelle in den SQL Server einfügen.
So überprüfen und importieren Sie eine Excel-Tabelle in die SQL Server-Datenbank:
Bei "dem Assistenten" gehe ich davon aus, dass Sie vom "Assistenten zum Importieren und Exportieren von SQL Server" sprechen. (Ich bin auch ziemlich neu, daher verstehe ich die meisten Fragen nicht, ganz zu schweigen die meisten Antworten, aber ich glaube, ich bekomme diese Frage). Wenn dies nicht der Fall ist, können Sie die Tabelle oder eine Kopie nicht mitnehmen, die nicht importierten Spalten löschen und dann den Assistenten verwenden.
Ich habe immer die Möglichkeit gefunden, das zu tun, was ich damit brauche, und ich bin nur unter SQL Server 2000 (nicht sicher, wie sich andere Versionen unterscheiden).
Edit: Tatsächlich schaue ich es mir gerade an und ich scheine in der Lage zu sein, welche Spalten ich welchen Zeilen in einer vorhandenen Tabelle zuordnen möchte. Auf dem Bildschirm "Select Source Tables and Views" überprüfe ich das von mir verwendete Datenblatt, wählen Sie "Destination" aus und klicken Sie auf die Schaltfläche "Edit ...". Von dort können Sie die Excel-Spalte und die Tabellenspalte auswählen, der sie zugeordnet werden sollen.
Microsoft Access ist eine weitere Option. Sie könnten lokal eine Access-Datenbank auf Ihrem Computer haben, in die Sie die Excel-Tabellenkalkulationen (verfügbare Assistenten) importieren und über ODBC mit den SQL Server-Datenbanktabellen verknüpfen.
Anschließend können Sie eine Abfrage erstellen, die Daten aus der Excel-Tabelle an die SQL Server-Tabellen anfügt.
Ich denke es wird dir helfen
Besuchen Sie http://social.msdn.Microsoft.com/Forums/en-US/sqlgetstarted/thread/78f8e980-0bb6-4a48-b1b1-5f65bca1d511
Das beste Werkzeug, das ich je verwendet habe, ist http://tools.perceptus.ca/text-wiz.php?ops=7 Haben Sie es versucht?
Excel + SQLCMD + Perl = exceltomssqlinsert
und Sie können Ihr Excel als Front-End für MSSQL-Datenbank verwenden.
Der Importassistent bietet diese Option an. Sie können entweder die Option verwenden, um eine eigene Abfrage für die zu importierenden Daten zu erstellen, oder Sie können die Option zum Kopieren von Daten und die Schaltfläche "Zuordnungen bearbeiten" verwenden, um Spalten zu ignorieren, die Sie nicht importieren möchten.
Ich habe DTS (jetzt als SQL Server-Import- und Export-Assistent bezeichnet) verwendet. Ich habe dieses Tutorial verwendet das hat mir sogar in SQL 2008 und Excel 2010 (14.0) gut funktioniert.
Ich hoffe das hilft
-D
Probieren Sie zunächst die 32-Bit-Version des Importassistenten aus. Dies zeigt viel mehr unterstützte Importformate.
Hintergrund: Alles hängt von Ihrer Office-Installation (Runtimes Engines) ab.
Wenn Sie Office 2007 oder höher nicht installiert haben, können Sie mit dem Import Wizard (32 Bit) nur Excel 97-2003-Dateien (.xls) importieren.
Wenn Sie Office 2010 und Geater installiert haben (kommt auch in 64 Bit, nicht empfohlen), unterstützt der Import Wizard auch Excel 2007+ (.xlsx) -Dateien.
Einen Überblick über die Laufzeiten finden Sie unter Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist nicht auf dem lokalen Computer registriert.