Springen naar inhoud


- - - - -
DB .NET SOLVED

Data Overbrengen

.NET

  • Log in a.u.b. om te beantwoorden
Er zijn 7 reacties in dit onderwerp

#1 Hypenate

Hypenate

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1228 berichten
    Laatst bezocht 26 nov 2017 14:43
Inzender

Geplaatst op 27 januari 2015 - 23:04

Ik moet data van een tabel van de ene database naar de tabel van een andere database brengen.
De tempID heb ik even aangemaakt omdat ik dacht dat dit mij zo helpen met mijn probleem.
Onderstaand stukje werkt correct:
SQL Code:
INSERT INTO SecurityV3.[dbo].[tblReport] (agentID, forLeads, heading, locationID, report, reportPriorityID, [sign], [time], todoEndDate, todoStartDate, tempID)
SELECT agentId, 'false', verslagHoofding, 11, verslagTekst, 2, 'false', verslagDatumtijd, verslagEinddatum, verslagBegindatum, verslagID
FROM [dbo].[tblVerslag]
GO

Het loopt echter mis indien ik de reacties wil gaan koppelen, dan lopen de ID's mis, omdat er in tblVerslag verslagen zijn gewist etc metgevolg dat ik reacties krijg bij verslagen die bij een ander verslag horen.
Vroeger hing dit bij aan het verslag en was er maar 1 reactie mogelijk, in de nieuwe database wordt deze reactie in een andere tabel geplaatst zodat er op 1 verslag meerdere reacties kunnen.
Hier schort dus iets aan:
SQL Code:
INSERT INTO SecurityV3.[dbo].[tblReportReply] (b.agentID, b.reply, b.reportID, b.[time])
SELECT a.agentLgId, a.verslagAntwoordLg, a.verslagId, '12/01/1986'
FROM [dbo].[tblVerslag] a JOIN SecurityV3.dbo.tblReport b
ON a.verslagId = b.tempID
WHERE agentLgId IS NOT NULL
GO


En deze werkt evenmin:
SQL Code:
INSERT INTO SecurityV3.[dbo].[tblReportReply] (b.agentID, b.reply, b.reportID, b.[time])
SELECT a.agentCoId, a.verslagAntwoordCo, a.verslagId, '12/01/1986'
FROM [dbo].[tblVerslag] a, SecurityV3.dbo.tblReport b
WHERE agentCoId IS NOT NULL AND a.verslagId = b.tempID 
GO

Iemand een idee hoe dit juist moet?

#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 29 januari 2015 - 13:57

Geef de schema's van de source en target database?
Wat is de FK van ReportReply naar Report?

Is dit een eenmalige actie?

#3 Hypenate

Hypenate

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1228 berichten
    Laatst bezocht 26 nov 2017 14:43
Inzender

Geplaatst op 29 januari 2015 - 14:56

Bericht bekijkenDirk Andries, op 29 januari 2015 - 13:57, zei:

Geef de schema's van de source en target database?
Oude tabel (waar de antwoorden samen zitten met het verslag:
SQL Code:

Nieuwe tabel voor de verslagen:

SQL Code:

Nieuwe tabel voor bijhorende antwoorden:
SQL Code:


Bericht bekijkenDirk Andries, op 29 januari 2015 - 13:57, zei:

Wat is de FK van ReportReply naar Report?
reportID

Bericht bekijkenDirk Andries, op 29 januari 2015 - 13:57, zei:

Is dit een eenmalige actie?
Jup

#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 januari 2015 - 10:25

Bericht bekijkenHypenate, op 29 januari 2015 - 14:56, zei:

Oude tabel (waar de antwoorden samen zitten met het verslag: ...

Euh, ... dat is geen schema, dat zijn selects.
Dus moet ik wat gissen.
Je gebruikt Identity voor Id in Report en voor Id in ReportReply?
En daardoor heb je andere Id 's in de oude en de nieuwe tabellen met reports?
En dat is de reden voor je tempId?


Indien dat klopt: twee mogelijke oplossingen.
1. Schrijf de oude tabel weg in de nieuwe databank zoals ze is naar een tijdelijke tabel, en splits daarna de tijdelijke tabel in de nieuwe databank naar je nieuwe tabellen (probleem van ontbrekende id's is opgelost).

2. Schrijf het Id van je oude tabel weg als Id van de nieuwe (PK wijzigt niet). Schakel daarvoor Identity tijdelijk uit met IDENTITY_INSERT (dat zet trouwens automatisch de nieuwe seed). Je moet dan wel zeker zijn dat de oude Id's uniek zijn in de nieuwe tabel (geen probleem als de nieuwe tabel leeg is:

SQL Code:
SET IDENTITY_INSERT Report ON
INSERT INTO Report (Id, Naam) SELECT oud.Id, oud.Naam FROM OudReport oud
SET IDENTITY_INSERT Report OFF

INSERT INTO ReportReply (ReportId, Tekst) SELECT oud.Id, oud.Tekst FROM OudReport oud



Ik zou voor de tweede oplossing gaan (PK's wijzigen niet t.o.v. de oude databank).

#5 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 januari 2015 - 18:28

Bericht bekijkenDirk Andries, op 30 januari 2015 - 10:25, zei:


Indien dat klopt: twee mogelijke oplossingen.
1. Schrijf de oude tabel weg in de nieuwe databank zoals ze is naar een tijdelijke tabel, en splits daarna de tijdelijke tabel in de nieuwe databank naar je nieuwe tabellen (probleem van ontbrekende id's is opgelost).
Je genereert dan wel nieuwe Id's voor de tuples in Report (dus de PK van Report wijzigt t.o.v. oude databank)
SQL Code:
INSERT INTO TempReport (Naam, Tekst, ...) SELECT oud.Naam, oud.Tekst, ... FROM OudReport oud


en dan kopiëren naar targets en temp tabel verwijderen:
SQL Code:
INSERT INTO Report (Naam, ...) SELECT temp.Naam, ... FROM TempReport
INSERT INTO ReportReply (ReportId, Tekst, ... ) SELECT tmp.Id, tmp.Tekst, ... FROM TempReport tmp
DROP TABLE TempReport



#6 Hypenate

Hypenate

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1228 berichten
    Laatst bezocht 26 nov 2017 14:43
Inzender

Geplaatst op 30 januari 2015 - 21:43

Bedankt!

#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 30 januari 2015 - 23:25

Bericht bekijkenHypenate, op 30 januari 2015 - 21:43, zei:

Bedankt!

Wat is het geworden?

#8 Hypenate

Hypenate

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1228 berichten
    Laatst bezocht 26 nov 2017 14:43
Inzender

Geplaatst op 31 januari 2015 - 09:17

Bericht bekijkenDirk Andries, op 30 januari 2015 - 23:25, zei:

Wat is het geworden?

SQL Code:
SET IDENTITY_INSERT SecurityV3.[dbo].[tblReport] ON 
INSERT INTO SecurityV3.[dbo].[tblReport] (reportID, agentID, forLeads, heading, locationID, report, reportPriorityID, [sign], [time], todoEndDate, todoStartDate, tempID)
SELECT verslagId, agentId, 'false', verslagHoofding, 11, verslagTekst, 2, 'false', verslagDatumtijd, verslagEinddatum, verslagBegindatum, verslagID
FROM [dbo].[tblVerslag]
GO
SET IDENTITY_INSERT SecurityV3.[dbo].[tblReport] OFF

INSERT INTO SecurityV3.[dbo].[tblReportReply] (b.agentID, b.reply, b.reportID, b.[time])
SELECT a.agentCoId, a.verslagAntwoordCo, a.verslagId, '12/01/1986'
FROM [dbo].[tblVerslag] a, SecurityV3.dbo.tblReport b
WHERE agentCoId IS NOT NULL AND a.verslagId = b.tempID
GO







Ook met taq DB .NET SOLVED, .NET voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[DB .NET SOLVED] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)