13. september 2004 - 10:14Der 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.
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.
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
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.
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.
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.