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

Mitglied: stefan1183

stefan1183 (Level 1) - Jetzt verbinden

14.04.2010 um 18:41 Uhr, 8261 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
7
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.
7
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 ...

Datenbanken

SQL Server Stored Procedure - execute as - Sysadmin für xp-cmdshell und Bulk Insert

Frage von ooAlbertDatenbanken

Hi, ich habe mir eine Stored Procedure auf einem SQL Server 2008 R2 geschrieben, die einen Aufruf für xp_cmdshell ...

Batch & Shell

Powershell Bulk Import CSV DHCPReservation

gelöst Frage von banane31Batch & Shell4 Kommentare

Hallo zusammen, ich verzweifele gerade an meinem neuen Windows Server 2016 DHCP Server und den Reservierungen. Im Netz habe ...

Datenbanken

Oracle Insert Befehl

gelöst Frage von MarabuntaDatenbanken4 Kommentare

Hallo, ich habe eine Datenbank, die etwa so aussieht: Jetzt soll mit einem Insert Befehl folgendes passieren: Also habe ...

Neue Wissensbeiträge
Off Topic
Europawahl 2019
Information von Frank vor 2 StundenOff Topic

Vom 23. bis 26. Mai 2019 findet die Europawahl in den Mitgliedstaaten der Europäischen Union statt (ja auch in ...

Humor (lol)

Minister wollen offenbar Ausweispflicht für .de-Domain

Information von Kraemer vor 15 StundenHumor (lol)7 Kommentare

Zitat von Golem.de: Die zuständigen Verbraucherschutzminister fordern einem Medienbericht zufolge offenbar eine Ausweispflicht für .de-Domains. Das soll Betrugsfälle mit ...

Off Topic
Was als Noob hier mal gesagt werden musste
Information von th30ther vor 2 TagenOff Topic5 Kommentare

Moinsen wertes Forum, ich möchte mich an dieser Stelle mal beim Forum generell und bei aqui speziell bedanken! Ich ...

Windows 10
Windows 10 Mai 2019 Update (Version 1903) ist da
Information von kgborn vor 2 TagenWindows 109 Kommentare

Nur ein kurzer Infosplitter: Microsoft hat die Nacht (21. Mai 2019) das Funktionsupdate auf Windows 10 Version 1903 freigegeben. ...

Heiß diskutierte Inhalte
Ausbildung
Wie sind eure Erfahrungen als oder mit Ü30 Azubis für Fachinformatik Systemintegration?
Frage von CaptainProcessorAusbildung24 Kommentare

Tagchen allerseits :) Mir steht in wenigen Monaten eine Veränderung bevor, da mein AG seine IT auslagert und ich ...

LAN, WAN, Wireless
Gleichzeitiger Zugriff übers Netzwerk: SSD vs HDD
gelöst Frage von ahussainLAN, WAN, Wireless20 Kommentare

Hallo, ich möchte in einem Rechner eine zusätzliche SATA-Festplatte einbauen und von dort diverse Ordner übers Netzwerk (Gigabit Ethernet) ...

Netzwerkmanagement
Gateprotect Firewall - Internetseiten werden teilw. nicht geladen
Frage von KivasFNetzwerkmanagement16 Kommentare

Morgen Zusammen, ich habe ein Problem mit einer Gateprotect Firewall welches mir echt Kopfschmerzen bereitet. Die Firewall hängt an ...

Router & Routing
HP 2920 als Router konfigurieren. Bitte um Unterstützung
gelöst Frage von suedi123Router & Routing16 Kommentare

Liebe Forumsmitglieder, ich habe hier ein Problem, bei welchem ich nicht weiterkomme, weil ich mich zu wenig mit der ...