Van | : | Ronald Beuker | Datum | : | 10-03-2008 |
Aan | : | Allen | MsgID | : | 3771.1 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Michel Uphoff (Sysop) | Datum | : | 10-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.2 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Peter | Datum | : | 10-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.3 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Hugo Kornelis | Datum | : | 11-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.4 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Tony de Jonge (Sysop) | Datum | : | 11-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.5 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 13-03-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.6 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 13-03-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3771.7 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 13-03-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.8 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 13-03-2008 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 3771.9 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Bijlagen :
Bericht 10 van 27 NL Computer Forum ~ SQL & Programmeren
Hoi Ronald, Kwam je zomaar toevallig even langs? Laten we zeggen dat ik zomaar opeens het gevoel had dat mijn expertise hier nodig was o:-) En toen kwam dus het opsplitsen aan de orde. Ik heb gekeken op de site van Sommarskog, maar ik kwam er niet uit Ik heb net even gekeken, en ik zie dat Erland sinds mijn laatste bezoek heel veel informatie heeft toegevoegd - zeer informatief, maar het maakt het wel onmogelijk om "even snel" een goede methode van zijn site te plukken. Daarnaast zie ik dat hij in de versies voor SQL Server 2005 overal rekening houdt met argumenten van meer dan 8000 bytes (8000 tekens vooor varchar, of 4000 voor nvarchar). Dat maakt de code complexer - vooral omdat hij (om snelheid te winnen) handmatig de invoer in stukken van 8000 bytes hakt... Maar hier haakte ik af: (...) Wat moet ik nou met die rare 9, 12, 27 en 37? Dat was bedoeld als voorbeeld van hoe je zo'n functie kunt aanroepen (met de -in dit geval- spatie-seperated values list als hardgecodeerd argument tbv het voorbeeld) En dan had-ie ook nog van die nóg uitgebreidere voorbeelden, compleet met Sloveense collations Aha! Betrapt - je hebt niet de hele site van voor tot achter gelezen! (Erland legt ergens uit dat hij een binaire collatie forceert om iets snelheid te winnen - een komma, puntkomma of spatie is immers toch hetzelfde in elke denkbare collatie - en dat hij kiest voor Sloveens omdat zijn testdata Sloveens is, maar elke binaire collatie gebruikt kan worden. Ik zeg, als je niet vast zit aan het uit het systeem persen van de laatste druppel performance, laat dit dan lekker zitten <g>). Elders op Internet vond ik wel een TsqlSplit functie die wél deed wat ik wilde Hihi. Dat is dus dezelfde functie die Erland op zijn site de naam REALSLOW gegeven heeft. Je mag drie keer raden waarom :D Persoonlijk vind ik de methode via een tabel met getallen erg handig. Heb je die nog niet, maak hem dan (eenmalig) - een tabel met één kolom, integer en primary key, gevuld met alle getallen van 1 tot en met een afdoende hoog getal - meestal is een miljoen wel voldoende. Zo'n tabel komt in heel veel gevallen goed van pas; naar mijn idee zou Microsoft hem gewoon mogen opnemen in de model database zodat elke nieuwe database er standaard over beschikt. :) CREATE TABLE dbo.Numbers (Number int NOT NULL PRIMARY KEY); WITH digits (d) AS ( SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) INSERT dbo.Numbers (Number) SELECT Number FROM (SELECT i.d + ii.d * 10 + iii.d * 100 + iv.d * 1000 + v.d * 10000 + vi.d * 100000 AS Number FROM digits i CROSS JOIN digits ii CROSS JOIN digits iii CROSS JOIN digits iv CROSS JOIN digits v CROSS JOIN digits vi) AS Numbers; Heb je die tabel, dan kan je de volgende vereenvoudigde vorm van inline_split_me (zie Erlands site voor de details) gebruiken. Ik ga uit van een varchar(8000) parameter, dus geen unicode en geen "onbeperkte" langte. Klopt dat uitgnagspunt niet, dan post ik graag een aangepaste versie. CREATE FUNCTION dbo.inline_split_me(@param varchar(8000))Die zal vermoedelijk een heel stuk sneller werken dan wat je nu hebt. Misschien niet het snelst mogelijke, maar vermoedelijk wel goed genoeg voor wat jij wil. Trouwens, STUFF?? Ik had er nog nóóit van gehoord. Dan moet je toch wat vaker mijn blog lezen. Anderhalf jaar geleden heb ik uitgebreid over deze (inderdaad veel te onbekende) functie geschreven. Zie http://sqlblog.com/blogs/hugo_kornelis/archive/2006/10/12/Stuff.aspx (http://sqlblog.com/blogs/hugo_kornelis/archive/2006/10/12/Stuff.aspx) Doe ik dit nou een beetje 'logisch', of doet mijn werkwijze de wenkbrauwen fronsen? Op zich is het best wel prima, alleen zie ik wel een paar kleinigheden. De functie die je nu hebt heeft varchar(8000) als parameter (net als mijn suggestie, dus), maar in je tekst schrijf je over nvarchar. We zitten toch niet nodeloos heen en weer te converteren, Beuker? Verder is het gebruik van tijdelijke tabellen helemaal niet nodig. Ik weet niet wat je met STATUSTEMP2 doet, maar STATUSTEMP kan je in elk geval laten vervallen door de twee queries als volgt te combineren: INSERT INTO #STATUSTEMP2 (orderID, statusDateTime, status) SELECT x.orderID, CAST(LEFT(M.Value,10) + 'T' + SUBSTRING(M.Value,12,5) + ':00') AS datetime), STUFF(M.Value,1,17,'') FROM XMLTEMP AS x CROSS APPLY dbo.inline_split_me(stathist) AS M; Zoals je ziet heb ik ook de ORDER BY laten vervallen (aangezien een tabel per definitie een ongeordende verzameling is, heeft het volgens mij geen zin om rijen te sorteren voordat je ze in de bak gooit), van de tijdelijke tabel een échte #TijdelijkeTabel gemaakt, en alvast de conversie naar datetime toegevoegd. Heb je morgen weer tijd voor andere zaken :-D Laat het me maar weten als er nog vragen zijn. Groetjes, Hugo Kornelis, SQL Server MVP-- Kijk ook eens op mijn blog: http://sqlblog.com/blogs/hugo_kornelis (http://sqlblog.com/blogs/hugo_kornelis) |
Van | : | Hugo Kornelis | Datum | : | 14-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.11 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 14-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.12 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 14-03-2008 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 3771.13 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 14-03-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.14 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 14-03-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.15 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Hugo Kornelis | Datum | : | 15-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.16 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Michel Uphoff (Sysop) | Datum | : | 15-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.17 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Tony de Jonge (Sysop) | Datum | : | 19-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.18 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 26-03-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3771.19 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 26-03-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.20 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 26-03-2008 |
Aan | : | Tony de Jonge (Sysop) | MsgID | : | 3771.21 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Michel Uphoff (Sysop) | Datum | : | 26-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.22 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Hugo Kornelis | Datum | : | 26-03-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.23 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 01-04-2008 |
Aan | : | Hugo Kornelis | MsgID | : | 3771.24 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Michel Uphoff (Sysop) | Datum | : | 01-04-2008 |
Aan | : | Ronald Beuker | MsgID | : | 3771.25 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 02-04-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3771.26 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |
Van | : | Ronald Beuker | Datum | : | 02-04-2008 |
Aan | : | Michel Uphoff (Sysop) | MsgID | : | 3771.27 |
Onderwerp | : | XML-velden gesplitst importeren SQL2005 | Forum | : | ws-nlcomputer |