Hvis jeg gemmer min datafil som ANSI og retter SQLNCHAR til SQLCHAR i format filen, samt DATAFILETYPE = 'char' i SQL koden så virker det fint. Hvor er problemet.
Jeg tror selv at problemet må ligge i format filen, fordi hvis jeg undlader at bruge format-filen ved fjerne FORMATFILE= samt indsætter FIELDTERMINATOR=',' og ROWTERMINATER='\n' så går alt godt, også med en unicode datafil.
Skyldes det mon en fejl i SQL server 2000 eller gør jeg noget galt.
stenmadsen>I have never used a Format file but reading Books Online IF you dont NOT specify a Format File then BCP prompts you for varios parameters such as storage type, prefix length, field length, and field and row terminators. Then if I have understood it correctly youthen get the chance to SAVE this file. So have youy tried doing this so that SQL Server makes the format file for you?
Ja, jeg har forsøgt at eksportere fra SQL server til en flad fil i unicode format med bcp programmet. Både forsøg på at bruge den generede format fil med mine SQL statements og forsøg på at importere de eksportere data tilbage til SQL serveren med bcp ved hjælp af den generede format fil mislykkedes.
Da jeg ikke har kunnet finde nogen brugbar forklaring på mine problemer med BULK INSERT og unicode data filer, så er her min egen research. Måske kan andre med samme problem få en fornemmelse af problemets natur.
-------------------------------------
I) Unicode fil dannet med notepad
har følgende egenskaber:
1) 2-byte header FF FE 2) 2-byte field terminator, f.eks 09 00 for tab 3) 4-byte end of line terminator f.eks. 0D 00 0A 00 4) alle øvrige tegn er 2-byte unicode
Den kan load'es til SQL server database med
bcp testDB..test in c:\data\test.txt -w
eller
BULK INSERT testDB.dbo.test FROM 'c:\projekter\test.txt' WITH (FIRSTROW = 1, DATAFILETYPE = 'widechar')
GO
Det er ikke muligt at bruge format fil ved BULK INSERT.
------------------------------------
II) Unicode fil dannet med
bcp testDB..test out c:\data\test.txt
hvor der vælges nvarchar,0,10,\t og nvarchar,0,10,\n (hvis filen har 2 tekst felter)
har følgende egenskaber: 1) ingen header 2) 1-byte field terminator 09 for tab 3) 2-byte end of line terminator 0D 0A 4) alle øvrige tegn er 2-byte unicode
Den kan ikke indlæses ved
bcp testDB..test in c:\data\test.txt -w
men ved
bcp testDB..test in c:\data\test.txt -fc:\data\test.fmt
eller
bcp testDB..test in c:\data\test.txt
hvor man besvarer prompt'ene som da filen blev eksporeret fra SQL serveren
Med BULK INSERT kan data load'es med (BEMÆRK at DATAFILETYPE = 'char')
BULK INSERT testDB..test FROM 'c:\data\test.txt' WITH (FORMATFILE = 'c:\projekter\test.fmt', FIRSTROW = 1, DATAFILETYPE = 'char') GO
Format filen test.fmt ser således ud 8.0 2 1 SQLNCHAR 0 10 "\t" 1 tekst1 SQL_Latin1_General_CP1_CI_AS 2 SQLNCHAR 0 10 "\r\n" 2 tekst2 SQL_Latin1_General_CP1_CI_AS
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.