Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bulk Insert mit Formatfile

Frage Entwicklung Datenbanken

Mitglied: stefan1183

stefan1183 (Level 1) - Jetzt verbinden

14.04.2010 um 18:41 Uhr, 7842 Aufrufe, 5 Kommentare

Hallo zusammen!

Ich versuche über BULK INSERT eine CSV-Datei mit einer Formatdatei einzulesen. Dabei tritt folgender Fehler auf:

Meldung 4823, Ebene 16, Status 1, Zeile 5
Massenladen ist nicht möglich. Ungültige Spaltennummer in der Formatdatei 'C:\Datenbanken\format.Fmt'.

Dies ist der Insert-Befehl:

BULK INSERT dbo.Konto_TMP
FROM 'c:\Datenbanken\Konto.csv'
WITH(FORMATFILE = 'C:\Datenbanken\format.Fmt')

Dies die Tabelle:

CREATE TABLE [dbo].[Konto](
[Buchung] [datetime] NULL,
[Valuta] [datetime] NULL,
[Auftraggeber Empfänger] [text] NULL,
[Buchungstext] [varchar](50) NULL,
[Verwendungszweck] [text] NULL,
[Betrag] [money] NULL,
[Währung] [varchar](50) NULL

Und zu guter letzt die Formatdatei:

10.0
7
1 SQLDATETIME 0 25 ";" 1 Buchung ""
2 SQLDATETIME 0 25 ";" 2 Valuta ""
3 SQLCHAR 0 150 ";" 3 [Auftraggeber Empfänger] ""
4 SQLCHAR 0 50 ";" 4 Buchungstext ""
5 SQLTEXT 0 150 ";" 5 Verwendungszweck ""
6 SQLMONEY 0 25 ";" 6 Betrag ""
7 SQLCHAR 0 50 ";\n" 7 Währung ""

Ich habe MS SQL 2008 Express auf meinem Rechner laufen.
Mitglied: Biber
14.04.2010 um 20:09 Uhr
Moin stefan1183,

bitte poste noch mal den Inhalt der (problemträchtigen) C:\Datenbanken\format.Fmt in Code-Tags.
Andernfalls ist es etwas schwierig zu erkennen, ob der inhalt passt.


Mein Verdacht ist allerdings, dass hier eher etwas anderes richtig spiegelverkehrt abgelaufen ist

  • in der DB-Tabelle sind ALLE (ich wiederhole ALLE) Datenfelder absolut beliebig befüll- oder ignorierbar... laso einfach NULLable (das hab ich ja noch nie gesehen....)
  • dagegen DARF in der CSV kein einziger Spaltenwert jemals ein NULL-Wert sein (der zweite Parameter "Längenpräfix" ist immer 0-->dann wird nie ein NULL-Wert kommen). . Das hab ich so auch selten gesehen.

Grüße
Biber
Bitte warten ..
Mitglied: stefan1183
14.04.2010 um 20:21 Uhr
Hallo Biber,

danke für die Antwort.

Das gröbste habe ich jetzt schon gelöst.

Ich hänge jetzt nur noch beim importieren an dem Feld "Betrag". Ich kann es zwar importieren, allerdings kann ich damit keine Berechnungen anstellen, da ich es bisher nur als char oder varchar in die Datenbank bekommen habe. Beim Convertieren in numeric, decimal, money bekomme ich eine Fehlermeldung.
In der CSV-Datei stehen Zahlenwerte wie X,XX XX,XX XXX,XX oder negativ -X,XX -XX,XX usw.

Habe übrigens heute das erste mal mit nem Formatfile was gemacht, daher wahrscheinlich das mit dem "Längenpräfix" usw.

Derzeitiger Stand:

Formatfile:
10.0 
1 SQLCHAR	0	25	";"	1	Buchung		"" 
2 SQLCHAR	0	25	";"	2	Valuta		"" 
3 SQLTEXT	                      0                150	";"	3	Auftraggeber_Empfänger	"" 
4 SQLCHAR	0	50	";"	4	Buchungstext	"" 
5 SQLTEXT 	0	150	";"	5	Verwendungszweck	"" 
6 SQLCHAR	0	25	";"	6	Betrag		"" 
7 SQLTEXT	                      0	50	"\n"	7	Währung		"" 
01.
   CREATE TABLE [dbo].[Konto]( 
02.
	[Buchung] [varchar](50) NOT NULL, 
03.
	[Valuta] [varchar](50) NOT NULL, 
04.
	[Auftraggeber Empfänger] [text] NULL, 
05.
	[Buchungstext] [varchar](50) NULL, 
06.
	[Verwendungszweck] [text] NULL, 
07.
	[Betrag] [char](25) NOT NULL, 
08.
	[Währung] [varchar](50) NULL)
Gruß

Stefan

[Edit Biber] Code-Tags nachgetragen. [/Edit]
Bitte warten ..
Mitglied: stefan1183
14.04.2010 um 22:15 Uhr
Ist erledigt, klappt nun endlich

Trotzdem danke!
Bitte warten ..
Mitglied: Biber
15.04.2010 um 06:18 Uhr
Moin stefan1183,

wir freuen uns natürlich mit dir, aber dennoch die neugierige Frage:
Wie hast du denn jetzt die "richtige" Interpretation der Währungswert mit Tausenderpunkten erreicht?

Da wälzte ich nämlich auch noch unausgereifte Lösungsansätze mit mir herum, die sich allerdings noch scheuten gepostet zu werden...

Grüße
Biber
Bitte warten ..
Mitglied: stefan1183
15.04.2010 um 17:17 Uhr
Moin!

01.
 
02.
Zunächst die beiden Tabellen in der Datenbank: 
03.
 
04.
Das ist die Zieltabelle, in der das Feld Betrag schon mit dem Datentyp money deklariert ist. 
05.
 
06.
CREATE TABLE [dbo].[Konto]( 
07.
	[Buchung] [varchar](50) NOT NULL, 
08.
	[Valuta] [varchar](50) NOT NULL, 
09.
	[Auftraggeber Empfänger] [text] NULL, 
10.
	[Buchungstext] [varchar](50) NULL, 
11.
	[Verwendungszweck] [text] NULL, 
12.
	[Betrag] [money] NOT NULL, 
13.
	[Währung] [varchar](50) NULL 
14.
15.
 
16.
 
17.
Dann eine Temp-Tabelle, in der "Betrag" noch als Char deklariert ist, für das einfügen der Daten aus der CSV-Datei. 
18.
 
19.
 
20.
CREATE TABLE [dbo].[Konto_tmp]( 
21.
	[Buchung] [varchar](50) NOT NULL, 
22.
	[Valuta] [varchar](50) NOT NULL, 
23.
	[Auftraggeber Empfänger] [text] NULL, 
24.
	[Buchungstext] [varchar](50) NULL, 
25.
	[Verwendungszweck] [text] NULL, 
26.
	[Betrag] [char](25) NOT NULL, 
27.
	[Währung] [varchar](50) NULL 
28.
29.
 
30.
Der Inhalt des Formatfile: 
31.
 
32.
10.0 
33.
34.
1 SQLCHAR	0	25	";"	1	Buchung		"SQL_Latin1_General_CP1_CI_AS" 
35.
2 SQLCHAR	0	25	";"	2	Valuta		"SQL_Latin1_General_CP1_CI_AS" 
36.
3 SQLTEXT	0	150	";"	3	Auftraggeber_Empfänger	"SQL_Latin1_General_CP1_CI_AS" 
37.
4 SQLCHAR	0	50	";"	4	Buchungstext	"SQL_Latin1_General_CP1_CI_AS" 
38.
5 SQLTEXT	0	150	";"	5	Verwendungszweck	"SQL_Latin1_General_CP1_CI_AS" 
39.
6 SQLCHAR	0	25	";"	6	Betrag		"SQL_Latin1_General_CP1_CI_AS" 
40.
7 SQLTEXT	0	50	"\r\n"	7	Währung		"SQL_Latin1_General_CP1_CI_AS"  
41.
 
42.
und zu guter Letzt, die Prozedur: 
43.
 
44.
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE TYPE = 'U' AND name = 'Konto_tmp') 
45.
		TRUNCATE TABLE Konto_tmp 
46.
 
47.
 
48.
BULK INSERT dbo.Konto_tmp 
49.
FROM 'c:\Datenbanken\Konto.csv' 
50.
WITH(FORMATFILE = 'C:\Datenbanken\format.Fmt') 
51.
 
52.
DELETE FROM dbo.Konto_tmp 
53.
WHERE Buchung = 'Buchung' 
54.
 
55.
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE TYPE = 'U' AND name = 'Konto_betrag') 
56.
		DROP TABLE Konto_betrag 
57.
		 
58.
SELECT *, CONVERT(money,Betrag)/100 AS neuer_betrag 
59.
INTO dbo.Konto_Betrag 
60.
FROM dbo.konto_tmp 
61.
 
62.
 
63.
INSERT INTO dbo.konto (Buchung, Valuta, [Auftraggeber Empfänger], Buchungstext, Verwendungszweck, Betrag, Währung) 
64.
 
65.
SELECT Buchung, Valuta, [Auftraggeber Empfänger], Buchungstext, Verwendungszweck, neuer_betrag, Währung 
66.
FROM dbo.Konto_Betrag 
67.
WHERE Buchung NOT IN (SELECT Buchung FROM dbo.Konto) 
68.
 
69.
DROP TABLE Konto_Betrag 
70.
 
Da das Script nicht sehr lang ist, wirst du damit sicherlich zurecht kommen.
Es gibt wahrscheinlich noch eine schönere Variante, aber zumindest funktioniert es

Gruß

Stefan
Bitte warten ..
Ähnliche Inhalte
Datenbanken
BULK INSERT mit Auslassen von Feldern, bzw. ergänzen von Feldern
Frage von TiCarDatenbanken1 Kommentar

Hi, ich würde gerne eine CSV Datei in eine Tabelle laden und die Tabelle hat aber noch zusätzliche Felder ...

Batch & Shell
Bulk User Import aus CSV Datei
gelöst Frage von ivaylo53Batch & Shell3 Kommentare

Hallo an die Community, ich habe ein Script geschrieben um anhand einer CSV Datei Bulk User in die AD ...

Datenbanken
Primärschlüsselfehler bei insert Statement
gelöst Frage von dax4funDatenbanken6 Kommentare

Hi liebe Leute, info: habe bei einer DB per select die gewünschten Daten abgefragt und in eine csv gesichert. ...

Datenbanken
TSQL - Tabellen Export als Insert Statement
Frage von ooAlbertDatenbanken3 Kommentare

Hallo, ich möchte ganz gern eine Tabelle aus meiner Datenbank (SQL Server 2008 R2) programatisch exportieren, als Insert Statment. ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...