[T-SQL] newID() op basis van resultaat

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om gegevens naar een xml bestand te krijgen gebruik ik de volgende query:

SQL:
1
2
3
4
5
6
7
8
 
SELECT 
(SELECT newid()) AS [EntryGuid],
t3.rplnrr03,
t2.syn_IsImported
FROM tabel3 t3
LEFT JOIN tabel2 t2 ON t2.seqnr = t3.seqnr
ORDER BY t3.seqnr


Deze query geeft het onderstaande resultaat:

EntryGuid | rplnrr03 | syn_IsImported
--------------------------------------------------------------------
5708A67B-8CCE-44E0-99EC-486DA5F9BB92 | 8336 | NULL
602F1DA7-D362-48CD-AFB8-0F428F6DB062 | 8355 | NULL
1CC3471C-9190-4800-AD66-E55F16712B97 | 8356 | NULL
C26391C6-0BB2-4F66-B7DD-25E6EA06F1C9 | 8356 | NULL
0520B68E-BD85-4778-97E8-27C949DC9B90 | 8356 | NULL
5F53530B-888B-495C-BFB5-36F7DAD090FD | 8357 | NULL
5B1AC608-B40E-43A6-B92C-FD01DCC2D151 | 8359 | NULL


Het is de bedoeling dat de rows die het zelfde sequence nummer (seqnr) hebben, dezelfde guid-waarde krijgen. Zoals in het onderstaande resultaat voorbeeld:


EntryGuid rplnrr03 syn_IsImported
--------------------------------------------------------------------
5708A67B-8CCE-44E0-99EC-486DA5F9BB92 | 8336 | NULL
602F1DA7-D362-48CD-AFB8-0F428F6DB062 | 8355 | NULL
1CC3471C-9190-4800-AD66-E55F16712B97 | 8356 | NULL
1CC3471C-9190-4800-AD66-E55F16712B97 | 8356 | NULL
1CC3471C-9190-4800-AD66-E55F16712B97 | 8356 | NULL

5F53530B-888B-495C-BFB5-36F7DAD090FD | 8357 | NULL
5B1AC608-B40E-43A6-B92C-FD01DCC2D151 | 8359 | NULL


Heeft iemand misschien een idee hoe ik dit voor elkaar kan krijgen?

Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 17-06 07:31

Swaptor

Java Apprentice

De vraag is natuurlijk hoe je gaat uitmaken welke van de guid-waardes leidend is.
Overigens: waarom is het niet makkelijker om de unique seqnr's op te vragen?


Ongetest:
SQL:
1
2
3
4
5
6
7
8
 
SELECT 
(SELECT newid()) AS [EntryGuid],
t3.rplnrr03,
t2.syn_IsImported
FROM tabel3 t3
LEFT JOIN tabel2 t2 ON t2.seqnr = t3.seqnr
ORDER BY t3.seqnr GROUP BY t3.seqnr

[ Voor 39% gewijzigd door Swaptor op 25-04-2008 14:07 ]

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het XML bestand moet voor een bepaald gegeven een waarde hebben in 'Guid' formaat om het te kunnen importeren. In dit geval wordt het XML bestand geimporteerd in E-Synergy (maar dat doet er eigelijk niet toe). Ik heb het voorbeeld simpel gehouden om het overzichtelijke te houden maar in werkelijkheid bevatten de rows natuurlijk veel meer gegevens. De EntryGuid is in dit geval nodig om aan te geven dat bepaalde rows van dezelfde orde zijn/ bij elkaar horen.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 18-09 23:16
Ehm, een GUID is een Globally unique identifier.
Iedere keer je dus een nieuwe guid genereert (mbhv newid()), krijg je dus een nieuwe , unieke ID.

Je zal dus voor ieder sequence nr één guid moeten genereren, en deze relatie evt in een andere tabel opslaan, en dan joinen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 17-06 07:31

Swaptor

Java Apprentice

Met bovenstaande in het achterhoofd blijft mijn oplossing valide.
Kennelijk is niet de guid maar het seqnr een unieke value waar waarde aan zit. Groupen op de seqnr is dus een afdoende oplossing voor het geschetste probleem. (tenzij je je verhaal niet afdoende hebt gegeven)

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 11:32
Gaat het hier om (meervoudige) verzoeken of om financiële boekingen?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

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

Annie

amateur megalomaan

Swaptor schreef op vrijdag 25 april 2008 @ 14:15:
Met bovenstaande in het achterhoofd blijft mijn oplossing valide.
Kennelijk is niet de guid maar het seqnr een unieke value waar waarde aan zit. Groupen op de seqnr is dus een afdoende oplossing voor het geschetste probleem. (tenzij je je verhaal niet afdoende hebt gegeven)
De TS heeft al aangegeven dat het gegeven voorbeeld een versimpeling is van de werkelijke situatie. Alleen groeperen is dus niet voldoende omdat je dan records gaat missen in het resultaat.

Een eenvoudige oplossing is om in een tijdelijke tabel de GUIDs en de seqnr's op te slaan en deze te joinen in de query die de uiteindelijke uitvoer regelt (whoami's oplossing). Bijv:
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT NEWID() AS EntryGuid, seqnr 
INTO #guids
FROM tabel3
GROUP BY seqnr

SELECT g.EntryGuid, t3.rplnrr03, t2.syn_IsImported
FROM tabel3 t3
JOIN #guids g ON t3.seqnr = g.seqnr
LEFT JOIN tabel2 t2 ON t2.seqnr = t3.seqnr 
ORDER BY t3.seqnr

[ Voor 3% gewijzigd door Annie op 07-05-2008 21:27 ]

Today's subliminal thought is:

Pagina: 1