Avatar billede texas2 Nybegynder
04. november 2001 - 12:06 Der er 5 kommentarer og
1 løsning

BULK INSERT

Jeg har en tabel med denne udformning :

id SMALLINT IDENTITY(1,1) PRIMARY KEY,
skandinavisk VARCHAR(50),
engelsk VARCHAR(50),
latinsk VARCHAR(50)

Og en tekstfil, med linier med denne udformning :

\"Ertefammilien\";\"Betulacea\".
\"Bladfammilien\";\"Fetulacea\".

Første del af linien er skandinavisk navn, mens 2. del er latinsk navn. ; er skilletegn og . er EOL tegn

Hvordan bruger jeg BULK INSERT her, sådan at indholdet i tekstfilen, bliver lagt over i tabellen på denne måde :

id  Skandinavisk    Engelsk  Latinsk
--------------------------------------
1  Ertefammilien  <NULL>  Betulacea
2  Bladfammilien  <NULL>  Fetulacea
3  ....            <NULL>  ....

Jeg bruger SQL Server 7.0.
Avatar billede texas2 Nybegynder
04. november 2001 - 12:08 #1
En lille præsisering : \"id\" feltet er autonummer, og der skal ikke indsættes nogen værdi i \"Engelsk\" feltet.
Avatar billede bennytordrup Nybegynder
04. november 2001 - 15:05 #2
Det kræver, at du har tekstfilerne placeret et bestemt sted således, at SQLServeren kan finde filerne.

Følgende script virkede hos mig:

--Set up linked server
EXEC sp_addlinkedserver txtsrv, \'Jet 4.0\', \'Microsoft.Jet.OLEDB.4.0\', \'c:\\test\', NULL, \'Text\'
GO

--Set up login mappings
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, \'sa\', \'Admin\', NULL
GO

--Select values from textfile into table Navne
insert into Navne (Latinsk, Skandinavisk)
SELECT Latinsk, Skandinavisk
FROM txtsrv...[test#txt]

--Remove linked server
EXEC sp_dropserver txtsrv, \'droplogins\'
go


Det første statement opretter en linked server til det bibliotek, som indeholder tekstfilerne. Det kræver, at der er installeret Jet med Text-ISAM (mstext40.dll - AFAIR) på serveren.

Næste statement mapper sa-login op til jet Admin-login

Tredje statement udfører selve BULK INSERT rutinen. Den kan godt tage sin tid - især, hvis der er mange data i textfilen.

Sidste statement dropper den linkede server igen.

(Jeg har prøvet det på SQL 2K, så jeg tør ikke garantere, at det virker på SQL Server 7).

Du skal evt. ændre filnavne og tabelnavne så det passer til dit formål
Avatar billede bennytordrup Nybegynder
04. november 2001 - 15:07 #3
Scriptet er kørt gennem Query Analyser. Det kan ikke lægges i en stored procedure (jeg kunne i hvert fald ikke få delen med at linke serveren til at fungere i stored prodecures).

En anden mulighed er at gennemføre det via VB og en connection til SQL Server og bruge connection-objektets Execute metode til at gennemføre de fire statements.
Avatar billede bennytordrup Nybegynder
04. november 2001 - 15:10 #4
Jeg glemte lige:

I det bibliotek, som indeholder text-filerne, skal du have en fil liggende med navnet Schema.ini. Den skal have følgende indhold

[Test.txt]
Format=Delimited(;)
ColNameHeader=False
MaxscanRows=0
DecimalSymbol=.
CharacterSet=Ansi
DateTimeFormat=ddmmyyyy
Col1=Skandinavisk Char width 50
Col2=Latinsk Char width 50


[Test.txt] er navnet på filen. Den svarer til tabelnavnet [Test#txt] i insert into statementet i første svar.
De øvrige oplysninger fortæller om filens udseende med skilletegn, tegnsæt og kolonne-informataion.
Avatar billede texas2 Nybegynder
04. november 2001 - 15:53 #5
Jeg kan ikke helt få det til at virke.

Når jeg kører scriptet, får jeg følgende fejl :

--------------------------
Server: Msg 207, Level 16, State 3, Line 3
Invalid column name \'Skandinavisk\'.
Server: Msg 207, Level 16, State 1, Line 3
Invalid column name \'Latinsk\'.
---------------------------

Det virker heller ikke som om det gør nogen forskel, om
Schema.ini findes i samme mappe som txtfilen eller ikke.
Avatar billede bennytordrup Nybegynder
04. november 2001 - 17:31 #6
Prøv at søge efter sp_addlinkedserver i hjælpen til din SQL Server 7. Jeg ved ikke, om der er forskelle i den måde, linkede servere bruges på i SQL Server 7.

Inden, jeg fik shema.ini til at ligge i mappen, blev filen tolket med første linie som feltnavn.

Col1 og Col2 linierne er vigtige, da de giver feltnavnene i text-filen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester