Avatar billede rosted Nybegynder
14. januar 2003 - 15:04 Der er 15 kommentarer og
2 løsninger

MSDE bulk import datoer

Hejsa

Er det muligt at bulk importere datoer i MSDE/MS SQL ved at benytte det interne dato/tid-format f.eks. 157552308774497 i stedet for standard-formatet f.eks. 2000-06-08 21:43:04. Grunden til at jeg ønsker dette er at det program som skal levere data er meget lang tid om at konvertere til dette datoformat, så jeg ville kunne vinde meget performance ved at skulle lave en mere simpel konvertering. Programmet som leverer tekst-filer til import er skrevet i Progress.
Avatar billede janus_007 Nybegynder
14. januar 2003 - 21:29 #1
Hvad mener du med bulk ?
Hvad er 157552308774497 ? (en slags unix timestamp eller)
Skal dette tal konverteres til 2000-06-08 21:43:04 ??
Avatar billede rosted Nybegynder
15. januar 2003 - 08:18 #2
Jeg importerer en mænge meget store tekstfiler med en masse datoer i ved hjælp af bulk copy import metoden i MSDE. Det er ikke et unix timestamp men den måde som en dato blive lagret på internt i MSDE/MS SQL. Jeg ville gerne ha' at man kunne skrive dette tal i tekst-filen og at den så kunne forstå det når det blev læst ind i et datetime felt.
Avatar billede rosted Nybegynder
15. januar 2003 - 09:19 #3
Det er også ok (men ærgeligt) at svare at det ikke kan lade sig gøre, men hvis der er nogen som ved det med sikkerhed vil jeg gerne høre det.
Avatar billede janus_007 Nybegynder
15. januar 2003 - 09:43 #4
hej rosted... jojo det kan nu snildt lade sig gøre!
Jeg vil nok anbefale dig at lave en insert-trigger til formålet og så huske at enable FIRE_TRIGGERS via bcp eller bulk... Tjek BOL, søg på "BULK INSERT" der er nogle switches, led efter FIRE_TRIGGERS :O)

hmm, nu sidder jeg lige og tænker på om du mener ud af SQL og ind i en textfil?
Avatar billede rosted Nybegynder
15. januar 2003 - 10:03 #5
Tjek BOL? Hvad mener du?

Nej jeg skal have data FRA en tekst-fil IND i MS-SQL.

Men jeg vil undersøge muligheden.
Avatar billede janus_007 Nybegynder
15. januar 2003 - 10:23 #6
ok :O) - nåmen så har jeg svaret dig rigtigt *GG*

BOL er BooksOnLine, du ved, den du får frem ved tryk på F1 når du står i eks.vis SQL-manageren!!

Fandt den også online hos MSDN : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ba-bz_4fec.asp
Avatar billede rosted Nybegynder
15. januar 2003 - 13:54 #7
Jeg prøver det engang, og så vender jeg tilbage. Tak indtil videre.
Avatar billede rosted Nybegynder
15. januar 2003 - 14:51 #8
Jeg kan ikke få den til at afvikle min trigger. Jeg har oprettet et bcp objekt, men det har ikke nogen egenskaber som ligner FIRE_TRIGGERS fra det eksempel de refererer til. Nogen idéer?
Avatar billede janus_007 Nybegynder
15. januar 2003 - 15:43 #9
Tjek denne her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/coprompt/cp_bcp_61et.asp

Klik på "Arguments", så folder der sig en liste ud over diverse argumenter som du kan sætte... Her skal du bruge den der hedder -h
Avatar billede rosted Nybegynder
15. januar 2003 - 15:47 #10
Jeg kører ikke via kommando prompt. Jeg opretter com objekter med egenskaber, som stort set minder om de argumenter man kan give ved kommando promt, f.eks. Row og Column delimiter, MaximumErrorsBeforeAbort, ImportRowsPerBatch osv. Men jeg kan ikke finde noget der minder om fire_triggers. Jeg skal kunne kalde dette via mit Progress program, så jeg er nødt til at gøre det på denne måde. Men triggers bliver ikke udført når jeg prøver nu. Er det ikke muligt at gøre på denne måde?
Avatar billede janus_007 Nybegynder
15. januar 2003 - 15:54 #11
hvor laver du de com objekter ??
Avatar billede rosted Nybegynder
16. januar 2003 - 08:16 #12
Jeg har prøvet at lave det i VB og i Progress. I VB ser det f.eks. sådan ud (hvilket virker men ikke kører nogle triggere):

Dim oDB As SQLDMO.Database
Dim oServer As SQLDMO.SQLServer
Dim oBCP As SQLDMO.bulkcopy
Set oBCP = New SQLDMO.bulkcopy
Set oServer = New SQLDMO.SQLServer
oServer.Connect "SERVER", "U", "P"
oServer.EnableBcp = True
Set oDB = oServer.Databases("DB")

With oBCP
    .DataFilePath = "C:\mappe\fil.txt"
    .DataFileType = SQLDMODataFile_CommaDelimitedChar
    .UseBulkCopyOption = True
    .ImportRowsPerBatch = 10000
    .MaximumErrorsBeforeAbort = 2
End With

Dim i As Long
i = oDB.Tables("testdt").ImportData(oBCP)
Avatar billede janus_007 Nybegynder
16. januar 2003 - 09:45 #13
Jeg er ved at undersøge sagen, men jeg må sige, at jeg aldrig har brugt den SQLDMO til bulkcopy! - Når jeg har lavet bulkcopy har jeg altid bare brugt
BULK INSERT db.dbo.table FROM 'c:\mybulkfiles.dat'
                  WITH
                  (KEEPNULLS, FORMATFILE = '\myformatfiles\bulk.fmt');

Det giver en fantastisk fleksibilitet, igennem formatfilen :O)

I dit tilfælde vil man typisk lave en conn.execute på det ovennævnte statement, hvor du så bare har erstattet mybulkfiles.dat med fil.txt og lige oprettet en formatfile! - Du behøver egentlig ikke engang at bruge en formatfile hvis du vil importere alle kollonner i text-filen ;O)

Så gør du bare sådan her:
BULK INSERT db.dbo.table FROM 'C:\mappe\fil.txt'
WITH
(KEEPNULLS, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');

Og så er du kørende *S*
Avatar billede rosted Nybegynder
16. januar 2003 - 10:23 #14
Hmm, jeg får nedenstående fejl ved:

CurrentProject.Connection.Execute ("BULK INSERT testdt FROM 'C:\mappe\fil.txt' WITH (FIRE_TRIGGERS, KEEPNULLS, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');")

"Incorret syntax near 'FIRE_TRIGGERS'"

Det virker dog fint uden. Er der andre argumenter som skal med hvis man skal kunne udføre dem?
Avatar billede rosted Nybegynder
16. januar 2003 - 10:23 #15
Dvs. uden FIRE_TRIGGERS argumentet.
Avatar billede janus_007 Nybegynder
16. januar 2003 - 11:08 #16
Det lyder underligt...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ba-bz_4fec.asp

Hvis du råder over en query analyzer, så prøv at sidde direkte der og fifle lidt med de forskellige argumenter!
Avatar billede rosted Nybegynder
16. januar 2003 - 11:29 #17
Det gør jeg desvære ikke. Jeg tror ikke jeg kommer videre med det, men her er dine point. Tak for en ihærdig indsats.
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