Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Bulk insert txt file do sql databáze

Zdravím, mám problém uložit obsah txt souboru do databáze sql server 2000.
Pokud použiju bulk insert načte se pouze toto :
12.02.2008 #30
země|měna|množství|kód|kurz
Austrálie|dolar|1| AUD|15,955
Brazílie|real|1|BRL|10,081
Bulharsko|lev |1|BGN|13,092
Čína|renminbi|1|CNY|2,450
Dánsko|koru na|1|DKK|3,436
EMU|euro|1|EUR|25,610
Estonsko|korun a|1|EEK|1,637
Filipíny|peso|100|PHP|43,310

Dál už nic.
Příkaz vypadá takto :

declare @SQL nvarchar(300)
set @SQL= 'BULK INSERT #WRK FROM ''c:\denni_kurz.txt' + ''' WITH (CODEPAGE = ''1250'' , FIELDTERMINATOR = ''|'',ROWTERMINATOR =''\n'') '

CREATE TABLE #WRK (TEXT_STRING text)

EXEC(@SQL)

SELECT * FROM #WRK
DROP TABLE #WRK

Zkoušel jsem uložení do tabulky pomocí DTS ale tam mi to napsalo : Unexpected End of File.
Pokud vytvořím visual basic project ve visual studiu 2005 a použiju objekt StreamReader, tak normálně přečtu celý soubor.
Napadá někoho kde je chyba, nikde chybu v souboru nevidím.
Soubor je ke stažení zde :
http://www.edisk.cz/stahni/81999/denni_kurz.txt_1.1 8KB.html

Předmět Autor Datum
načte se pouze toto .... Dál už nic. Takže se soubor nenačte celý? Nebo v čem je problém? Máš délku…
host 13.02.2008 13:29
host
V tom rozdíl není, ať tam dám nvarchar(300) nebo varchar(8000), a text tam nejde. Jo nenačte se celý…
Williem 13.02.2008 13:32
Williem
Celý text je v jednom řádku, pokud text rozdělím do více řádku tak ho přečtu přes bulk insert celý,…
Williem 13.02.2008 13:53
Williem
A zkoušel jsi ten typ text? Nebo zkus jako oddělovač řádků použít \r\n místo \n.
host 13.02.2008 14:04
host
1. Tabuľka, do ktorej vkladáš dáta, má iba jeden stĺpec (TEXT_STRING). Zrejme by ich malo byť viac.…
los 13.02.2008 14:37
los
Mockrát díky Losi, funguje to tak jak jsem chtěl. poslední
Williem 13.02.2008 19:02
Williem

Celý text je v jednom řádku, pokud text rozdělím do více řádku tak ho přečtu přes bulk insert celý, přes DTS to píše pořád to samé. Nejspíš bude řádek asi omezený na 255 znaků, jestli to chápu správně, jenomže nemám možnost automaticky soubor rozdělit na více řádků. Jde to teda nějak pomocí DTS nebo sql ?

1. Tabuľka, do ktorej vkladáš dáta, má iba jeden stĺpec (TEXT_STRING). Zrejme by ich malo byť viac.
2. V SQL príkaze je '\n' reťazec dlhý dva znaky, nie jeden znak nového riadka. Namiesto toho tam musíš vložiť CHAR(10).

Momentálne mám možnosť skúšať len na MS SQL 2005, kde to takto funguje:

DECLARE @sql NVARCHAR(300)
SET @sql = 'BULK INSERT #WRK FROM ''c:\denni_kurz.txt'' WITH ' +
	'(CODEPAGE=''1250'', FIELDTERMINATOR = ''|'', ROWTERMINATOR=''' + CHAR(10) + ''')'

CREATE TABLE #WRK
(
	Zeme NTEXT,
	Mena NTEXT,
	Mnozstvi NTEXT,
	Kod NTEXT,
	Kurz NTEXT
)

EXEC(@sql)
SELECT * FROM #WRK
DROP TABLE #WRK

Čo sa týka importu cez DTS, tak tam bude problémom najskôr ten prázdny riadok na konci súboru. Keď ho vymažeš, tak by to mohlo ísť.

Zpět do poradny Odpovědět na původní otázku Nahoru