[SQL] records verplaatsen

Pagina: 1
Acties:

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 16:36

Rhapsody

In Metal We Trust

Topicstarter
Is er een SQL commando om een record van de ene tabel naar de andere te verplaatsen?

Ik heb er nog nergens wat over kunnen vinden.

🇪🇺 pro Europa!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

begin;
insert into ... select ...;
if gelukt
delete ...;
commit;
else
rollback;
end;

en dat had je vast zelf wel kunnen bedenken.
Doorgaans zijn tabellen overigens zo ontworpen dat er geen twee tabellen zijn waartussen het logisch/wenselijk/mogelijk is records te verplaatsen...

Btw, volgende keer graag wat meer, duidelijker en beter uitleggen wat je precies wilt. Want datgene wat je wilt is waarschijnlijk fout als je twee identieke tabellen hebt ;)

[ Voor 23% gewijzigd door ACM op 22-12-2002 22:58 ]


  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 16:36

Rhapsody

In Metal We Trust

Topicstarter
Ik heb 1 tabel met producten en 1 tabel met geschiedenis.
Nu wil ik dus records kunnen verplaatsen (m.b.v. ASP.NET)

Maar er is ds geen move commando ofzo? In ieder geval bedankt

🇪🇺 pro Europa!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Er is in de sql-standaard geen move commando. Misschien dat jouw database het wel kent, maar ik gok van niet. Aangezien het geen gebruikelijke handeling is.

En zelf een simpele procedure schrijven is ook weer niet zo moeilijk natuurlijk :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
In jouw geval zou ik alles in 1 tabel houden en gewoon een boolean-flag aan ieder record toevoegen die aangeeft of het tot geschiedenis behoort ja/nee. Dan heb je maar 1 tabel en kun je met een UPDATE-query je zogenaamde 'move' uitvoeren (dwz de flag omzetten) :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Wat alleen niet handig is als je je product-id als primary key neemt (erg gebruikelijk) en je van elk product meerdere geschiedenisvarianten wilt bijhouden (prijswijzigingen, etc).
Maar als dat soort dingen geen bezwaar is valt er zeker wel wat voor te zeggen :)

[ Voor 26% gewijzigd door ACM op 22-12-2002 23:03 ]


  • Unipuma
  • Registratie: Juli 2001
  • Laatst online: 06-04-2021
Voor een geschiedenis tabel heb je denk ik ook meer informatie nodig dan alleen een kopie van het record. Wat me handig lijkt is om bij te houden a) wanneer de handeling is uitgevoerd b) door wie en c) wat die handeling was.
Als je een complete geschiedenis wilt bewaren, heeft het bovendien de voorkeur om met triggers op de database te werken voor dit soort acties, ipv het in je code te vangen. Triggers werken sneller, en ook als je eventueel een andere client voor je database gaat schrijven.

So much fun, it's a miracle it isn't declared illegal: driving a motorcycle


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

robjanssen

Software Developer

Wat wil je precies met je geschiedenis tabel bereiken.
Anders moet je misschien voor elke actie mbt het product iets in de geschiedenis tabel plaatsen.
En wat voor gegevens wil je in je geschiedenis tabel plaatsen?
Wanneer hoort een record tot de geschiedenis?

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 16:36

Rhapsody

In Metal We Trust

Topicstarter
ik heb dus 1 tabel "Product" met diverse producten. Daarbij geef ik ook aan wat de status van het product is.

ALs ik de status zet op "uitgeleverd" dan moet deze cverplaatst worden naar de tabel "geschiedenis".

1 record bestaat uit meerdere velden o.a. Ordernummer, datumstatuswijzizing etc etc.
Dus die datum zit allemaal al goed. Het enige wat ik niet voor elkaar krijg is het records verplaatsen naar de tabel "geschiedenis"

🇪🇺 pro Europa!


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 26-08 08:16

sopsop

[v] [;,,;] [v]

Naar mijn mening kun je hem net zo goed in de tabel laten staan, maar alleen een status field toevoegen waar geschiedenis in staat. Op zich heb je dat zelfs al met de status "uitgeleverd".

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

robjanssen

Software Developer

Als je de status op uitgeleverd zet dan heb je toch al wat je wilt?
Waarom zou je hem dan nog willen verplaatsen?

Anders moet je inderdaad na het 'op uitgeleverd' zetten een INSERT doen in de geschiedenis tabel en dan daarna een DELETE op de Products tabel.
Dit kan ook met een trigger?

Maar waarom zou je dan nog een veld uitgeleverd bijhouden?

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 16:36

Rhapsody

In Metal We Trust

Topicstarter
Ja das wel zo ja, ik zal het eens ff voorstellen


er zijn btw wel meerdere statussen mogelijk, uitgelever, geblokkeerd en nog een paar. vandaar dat statusveld.

Iig bedankt.

[ Voor 48% gewijzigd door Rhapsody op 23-12-2002 12:10 ]

🇪🇺 pro Europa!


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:46
Anders moet je misschien voor elke actie mbt het product iets in de geschiedenis tabel plaatsen.
Het verplaatsen is eigenlijk helemaal niet nodig, je kunt gewoon alles in 1 tabel mikken, zodra je een wijziging aan je product doorvoert voeg je een record in met de nieuwe gegevens. Bij de oude zet je de flag history op1, en kan je bijvoorbeeld info opslaan over wanneer deze geschiedenis is geworden.

Als je het op deze manier doet kan je later ook nog bijv oude offertes bekijken met de toen geldende prijzen, dat kan soms enorm handig zijn omdat je anders met andere gegevens werkt als de mensen die een ofefrte op papier hebben die al een tijdje oud is.
Pagina: 1