Avatar billede iakob Nybegynder
13. september 2004 - 10:14 Der er 4 kommentarer og
1 løsning

BCP og indlæsning

Jeg vil gerne have lagt indholdet af et antal BCP filer ind i en datakolonne. Dvs jeg har fx to tabeller, Tabel A og Tabel B som har hver deres kolonner. Disse to tabeller ønsker jeg at få lagt i BCPTable, som har formatet:
TableName varchar(255)
TableContents varchar(8000)
SeqNO int

Foreløbigt så BCPer jeg tabel A og B ud og forsøger at læse dem ind igen ved hjælp af SP_OAMethod(Scripting.FileSystemObject). Det lykkedes også normalt.

Eneste problem jeg har er at hvis der er null i en kolonne i table A eller table B, så skrives det ud i en BCP fil som (hex)00 00

Når det sker, så tror FileSystemObject at der er tale om en EOF. Dermed kan jeg ikke få læst hele min tabel ind.

Hvordan løser jeg dette problem? Er der andre måder at få indholdet af BCPfilen lagt ind i en tabel i databasen?

Det skal være BCP formatet af filen som gemmes i BCPTable.
Avatar billede gudjon Nybegynder
14. september 2004 - 09:04 #1
Om du bruger Enterprise Manager til at BCP ud, kan du specificere en SELECT sætning til at trække ud. I din SELECT sætning kan du derefter bruger feltnavn=ISNULL(feltnavn,værdi). Det skulle løse dit problem.
Avatar billede iakob Nybegynder
14. september 2004 - 10:05 #2
Ikke helt fordi jeg bruger den samme stored procedure til at bcp flere forskellige procedurer ud. Tabelnavnet er et argument til denne procedure. Løsningen skulle gerne være generel
Avatar billede gudjon Nybegynder
14. september 2004 - 10:22 #3
jeg kan ikke se hvordan du kan undgå at manipulere med feltværdien, enten når du danner data (i BCP) eller bagefter i filen (f.eks. med en lille VB rutine).
Vil du gøre det i BCP er du nødt til at danne SQL afhængig af hver tabel du trækker ud, evt. med hjælp fra Meta data omkring tabellen (som giver en generel løsning, men er måske lidt langhåret) eller at du skriver en SQL til hver tabel og vælger den rigtige tabel.
Det er i øvrigt lidt svært at hjælpe når jeg ikke ved helt precis hvad det er du laver.
Avatar billede iakob Nybegynder
15. september 2004 - 08:34 #4
Overordnet set, så har jeg et antal tabeller hvis indhold jeg ønsker at sende via en webservice (dotnet) til et klientprogram. Tabellerne skal alle sendes som objekter, der ser således ud:
Navn, Indhold (hvor indholdet er indholdet som det ser ud i en bcp-fil).
Det er så meningen at klientprogrammet skal hente data ind ved at gemme "Indhold" i en fil og BCP det ind.
Klientprogrammet må jeg ikke ændre i.
Webservicen ligger på en webserver og har derfor ikke direkte adgang til foldere på SQL server maskinen. Derfor kan den ikke læse indholdet af bcp-filer.

Det er også derfor jeg ønsker at holde min kode så generel som muligt, fordi over tid kan der komme flere tabeller til og de kan også blive ændret. Det skal være så vedligeholdelsesvenligt som overhovedet muligt. Og klientprogrammet må under ingen omstændigheder skulle vide noget om tabellerne, andet end deres navne.

Det ser ikke ud til at det kan lade sig gøre, så jeg lukker spørgsmålet nu.
Avatar billede iakob Nybegynder
15. september 2004 - 08:35 #5
Iøvrigt, tak for at du prøvede
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