Toon posts:

[MSSQL]verschillende CSV-files automatisch invoegen

Pagina: 1
Acties:
  • 158 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik wil met SQL Server2000 verschillende CSV-Files invoegen. Het invoegen lukt me wel MAAR om het uur komt er een file bij die moet worden ingevoegd. Nou hebben die bestanden een 'General Date' format als bestandsnaam. De bestanden hebben dus allemaal een andere naam: 12-03-03 10:00:00.csv daarna dus: 12-03-03 11:00:00.csv

Dus daarmee is misschien wel iets te doen. Alleen weet ik bij god niet hoe :?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
al eens naar DTS gekeken en hoe je daar dmv vbscript iets mee kunt doen?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Jawel,

Maar zoals ik eerder zei ben ik niet echt een SQL held :D moet voor stage iets maken.
Er is ooit es iets in VB gemaakt... maar dat is met VB 6.0 en ik weet niet of de VB die je in SQL invoert dezelfde is. Het werkt ieg niet :)

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Die naam die nekt je. Als het ding nu elke keer dezelfde naam had, dan kon je een DTS package maken via de wizard, en die saven, de gesavede batch dan schedulen om het uur in sqlserveragent.

Omdat je elke keer een andere naam hebt, moet je het package zo aanpassen dat je de naam die het allernieuwst is inleest. Dit is meteen erg klote.

Als je nu ervoor kunt zorgen dat de nieuwste file naar een aparte directory wordt gecopieerd, daar een vaststaande naam krijgt, je DTS process die file altijd laat importeren, en na een import die file delete, dan hoef je niet moeilijk te doen met DTS iig.

Wie verzindt trouwens dit soort onzinnigheid, elk uur een cvs file en dan ook die file een naam geven, die in dezelfde dir dumpen als de andere files... vragen om moeilijkheden.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 07:07
DTS is inderdaad erg geschikt hiervoor. Is de naam van het bestand altijd 'dd-mm-yy hh-00-00.csv' ? Of kunnen er ook minuten/seconden voorkomen in de naam? Als je zeker weet dat de naam enigzins gelijk blijft dan zou je met date/time variablen een eenvoudig DTS scripje kunnen maken. Als de naam elk willekeurig tijdstip kan krijgen wordt het lastiger. Je zal dan eerst de bestandsnaam moeten achterhalen met een functie.

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

In een DTS gebruik je VBScript dat is bijna hetzelfde als VB, maar niet helemaal hetzelfde.

Verder zou je die DTS kunnen schedulen zodat hij elk uur controleert of er nieuwe bestanden staan.
Bestanden die je al verwerkt hebt, kun je kopieren naar een andere directory of je houdt bij welke bestanden je al verwerkt hebt, of welke datum je het laatste verwerkt hebt?

Verwijderd

Ik zou het als volgt doen:

1 Maak een scheduled job aan op je SQL Server. Start die 5 minuten voordat de .csv file wordt gemaakt.

In die scheduled job move je met een een batch file (of VBScript, maakt niet uit) alle .csv files naar een aparte directory.

2. Dan komt het tijdstip dat de .csv file in je huidige directory wordt geplant.

3 Dan moet er een 2de scheduled job komen die een actie uitvoert:
COPY *.CSV D:\IMPORT.CSV /Y
Oftwel kopieer elke gevonden .CSV file (en dat is er maar 1) naar D:\IMPORT.CSV en overschrijf deze zonder aan de gebruiker te vragen.

4 En nu komt de laatste scheduled job vanuit DTS om D:\IMPORT.CSV te importeren.


Een uur later begint het hele riedeltje opnieuw en de laatst gemaakte .csv file komt bij de rest van .CSV files in een aparte directory. Zo hou je alle "bronfiles" en heb je toch een vaste file om DTS op los te laten.

Het is een klein beetje een hakkie-takkie oplossing maar als tussenoplossing is dit prima. Zelf zou ik een prachtig mooi VB programmaatje schrijven die dit voor me fixed in 1 "swing" maar het gaat om het doel, en dat wordt zo gehaald.

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 23-08 11:08

Freee!!

Trotse papa van Toon en Len!

Ik zou het moven van alle .CSV-files direct na afhandeling doen, scheelt je (minimaal) één extra job.

[ Voor 73% gewijzigd door Freee!! op 17-03-2003 12:57 . Reden: Quote niet echt nodig ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Kijk ook eens naar de Dynamic Properties Task
http://msdn.microsoft.com...sql/dts_elemtsk3_6q7f.asp

Today's subliminal thought is:


  • sandergar
  • Registratie: Juni 2002
  • Laatst online: 07:07
Verwijderd schreef op 17 March 2003 @ 12:53:
Ik zou het als volgt doen:

1 Maak een scheduled job aan op je SQL Server. Start die 5 minuten voordat de .csv file wordt gemaakt.

In die scheduled job move je met een een batch file (of VBScript, maakt niet uit) alle .csv files naar een aparte directory.

2. Dan komt het tijdstip dat de .csv file in je huidige directory wordt geplant.

3 Dan moet er een 2de scheduled job komen die een actie uitvoert:
COPY *.CSV D:\IMPORT.CSV /Y
Oftwel kopieer elke gevonden .CSV file (en dat is er maar 1) naar D:\IMPORT.CSV en overschrijf deze zonder aan de gebruiker te vragen.

4 En nu komt de laatste scheduled job vanuit DTS om D:\IMPORT.CSV te importeren.


Een uur later begint het hele riedeltje opnieuw en de laatst gemaakte .csv file komt bij de rest van .CSV files in een aparte directory. Zo hou je alle "bronfiles" en heb je toch een vaste file om DTS op los te laten.

Het is een klein beetje een hakkie-takkie oplossing maar als tussenoplossing is dit prima. Zelf zou ik een prachtig mooi VB programmaatje schrijven die dit voor me fixed in 1 "swing" maar het gaat om het doel, en dat wordt zo gehaald.
Wat dacht je van het maken van een workflow ipv van drie losstaande "scheduled jobs". Plan 1 job en laat die meerdere taken uitvoeren! Kan je ook controleren of een bepaalde taak goed is uitgevoerd alvorens een volgende te starten!

Wat nu als er per ongeluk (door wat voor reden dan ook) twee CSV bronbestanden zijn? Dan heb je een probleem. De veiligste manier is meestal toch om de exacte bestandsnaam te achterhalen en om die te verwerken.

2.730 Wp Enphase Zuid 30°, 4.450 Wp Enphase Noord 30° | Smart EVSE laadpaal | Victron Multiplus II 48/5000/70 3 Fase | 45kWh PylonTech Pelio accu


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

sandergar schreef op 17 maart 2003 @ 18:43:
[...]

Wat dacht je van het maken van een workflow ipv van drie losstaande "scheduled jobs". Plan 1 job en laat die meerdere taken uitvoeren! Kan je ook controleren of een bepaalde taak goed is uitgevoerd alvorens een volgende te starten!
Helaas is dat natuurlijk niet altijd mogelijk. Bijvoorbeeld als je afhankelijk bent van andere systemen die niet te koppelen zijn met MSSQL.

Als het allemaal in 1 job cq. task te duwen is dan is dat voor de overzichtelijkheid inderdaad over het algemeen ook handiger, imho.
sandergar schreef op 17 maart 2003 @ 18:43:
Wat nu als er per ongeluk (door wat voor reden dan ook) twee CSV bronbestanden zijn? Dan heb je een probleem.
Dat kan je natuurlijk gewoon afvangen binnen je job.

[ Voor 10% gewijzigd door Annie op 17-03-2003 19:06 ]

Today's subliminal thought is:


Verwijderd

Topicstarter
ohw de topic loopt nog :D

Nou kijk de files hebben precies deze naam:
2003-02-15-06.csv,
2003-02-15-07.csv,
2003-02-15-08.csv

Ik kan verder nix aan de server doen die die CSV files maakt.
Tis kut... waarom geeft ie me ook zon opdrachten... Ik heb nog nooit echt intensief met MSSQL VB gewerkt.

SQL gaat nog wel nu kan wel wat maken. Maar dit kan denk ik niet met SQL instructies.
Ik zoek nu alleen een functie waarin SQL Server, die bestanden om het uur kan invoegen.
Kan niemand me een stukje code maken? want ik weet niet eens hoe ik begin met VBscript.

Ipv dat mijn stagebegeleider me een leuke netwerkopdracht laat doen ofzo...

(loop stage als ICT-beheerder niveau4 MBO)

Verwijderd

zoek es in booksonline op paramaters die je kunt gebruiken in een package.
Je kunt namelijk via vbscript de param van een package vullen. Met VBscript is het heel simpel om de laatste file uit te lezen en de naam door te geven aan de param. En uw probleem is opgelost. Wrox heeft daar ook een heel mooi boek overgeschreven waarin dit exact beschreven staat.

Verwijderd

Het is een klein beetje een hakkie-takkie oplossing maar als tussenoplossing is dit prima. Zelf zou ik een prachtig mooi VB programmaatje schrijven die dit voor me fixed in 1 "swing" maar het gaat om het doel, en dat wordt zo gehaald
Ik zeg dat niet voor niks ;)

Heb je al vooruitgang geboekt intussen?

[ Voor 10% gewijzigd door Verwijderd op 21-03-2003 18:47 ]


Verwijderd

Verwijderd schreef op 21 March 2003 @ 14:04:
ohw de topic loopt nog :D

Nou kijk de files hebben precies deze naam:
2003-02-15-06.csv,
2003-02-15-07.csv,
2003-02-15-08.csv
Verwijderd schreef op 14 March 2003 @ 11:56:
Ik wil met SQL Server2000 verschillende CSV-Files invoegen. Het invoegen lukt me wel MAAR om het uur komt er een file bij die moet worden ingevoegd. Nou hebben die bestanden een 'General Date' format als bestandsnaam. De bestanden hebben dus allemaal een andere naam: 12-03-03 10:00:00.csv daarna dus: 12-03-03 11:00:00.csv

Dus daarmee is misschien wel iets te doen. Alleen weet ik bij god niet hoe :?
Ik zie 2 verschillen in deze 2 posts van je.

Welk bestandsnaam-formaat is het?


Hiermee moet het lukken:

[url]http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_20444957.html[/url]

[ Voor 8% gewijzigd door Verwijderd op 21-03-2003 21:05 ]


Verwijderd

Topicstarter
Ok nog es alles duidelijk:

Kan iemand mij een voorbeeld geven van Visual Basic / ActiveX script (mag ook SQL zijn, maar denk niet dat dat kan) waarin om het uur 1 csv bestand in een tabel wordt geschreven?
Het probleem is dat er om het uur een nieuw bestand wordt aangemaakt met een andere naam bijvoorbeeld:
2003-02-15-00.csv (=15 februari 2003 om 00:00u)

Een uur later komt er een nieuw bestand dat heet:
2003-02-15-01.csv (=15 februari 2003 om 01:00u)
enz.

Is zoiets met VB of een ActiveX script (in Microsoft SQL Server 2000) te maken? Zelf heb ik er eigenlijk geen verstand van. Ik kan alleen een beetje MSSQL en in de HELP kan ik nix vinden.

Bedankt alvast.

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Kan iemand mij een voorbeeld geven van Visual Basic / ActiveX script (mag ook SQL zijn, maar denk niet dat dat kan) waarin om het uur 1 csv bestand in een tabel wordt geschreven?
Kant en klare Scripts hebben we hier niet voor je. Maar je zou eens kunnen proberen verder dan alleen de help te zoeken!
Wellicht dat je probleem met Windows Task Manager is op te lossen.

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 23-08 11:08

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 27 March 2003 @ 10:53:
Ok nog es alles duidelijk:

Kan iemand mij een voorbeeld geven van Visual Basic / ActiveX script (mag ook SQL zijn, maar denk niet dat dat kan) waarin om het uur 1 csv bestand in een tabel wordt geschreven?
Het probleem is dat er om het uur een nieuw bestand wordt aangemaakt met een andere naam bijvoorbeeld:
2003-02-15-00.csv (=15 februari 2003 om 00:00u)

Een uur later komt er een nieuw bestand dat heet:
2003-02-15-01.csv (=15 februari 2003 om 01:00u)
enz.

Is zoiets met VB of een ActiveX script (in Microsoft SQL Server 2000) te maken? Zelf heb ik er eigenlijk geen verstand van. Ik kan alleen een beetje MSSQL en in de HELP kan ik nix vinden.

Bedankt alvast.
De exacte namen lijken mij niet zo heel belangrijk. Maak een programmaatje dat elk uur kijkt welke (:CSV) bestanden er in die specifieke directory staan, die op gesorteerde volgorde verwerkt en daarna naar een andere directory verplaatst. Eventueel kan het verwerken door een ander programma gedaan worden, dat als parameter dan de gevonden naam meekrijgt.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
devraux schreef op 27 maart 2003 @ 10:56:
[...]

Kant en klare Scripts hebben we hier niet voor je. Maar je zou eens kunnen proberen verder dan alleen de help te zoeken!
Wellicht dat je probleem met Windows Task Manager is op te lossen.
Een voorbeeld is geen kant en klaar script. Bedoel een stukje ofzo waar ik al iets mee kan doen.
enja Windows Task Manager... :|

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Heb je verder nog iets gedaan met mijn opmerking eerder in dit topic? Bij mijn weten is dit namelijk gewoon mogelijk (en nog vrij simpel te implementeren ook).

Ik heb hier geen SQL2K ter beschikking, maar afaik moet je aan een dynamic property task ook een query kunnen opgeven, bijv.

SQL:
1
2
3
4
5
6
DECLARE @ISOtime CHAR(23)
SET @ISOtime = CONVERT(CHAR(23), CURRENT_TIMESTAMP, 121)

SELECT LEFT(@ISOtime, 10)                 -- date part
       + '-' + SUBSTRING(@ISOtime, 12, 2) -- hour part
       + '.csv'                           -- extension


De package hoeft dan alleen nog maar de feitelijke import te bevatten (waarbij de connection naar het csv bestand dynamisch is) en evt kan je deze nog uitbreiden met een controle (bijv via ActiveX task) of het bestand bestaat, een mailtje met het resultaat van de import, logging, enz...
En de totale package kan je elk uur laten draaien via de SQL Agent.

Today's subliminal thought is:


Verwijderd

Topicstarter
Ok, bedankt... kan ik al meer mee!
Ik laat het wel weten als het is gelukt!
Pagina: 1