webForumDet fria alternativet

Kopiera data med nytt Id

4 svar · 230 visningar · startad av lolukokasos

lolukokasosMedlem sedan mars 2001196 inlägg
#1

Jag har en databas (MSSQL) med bla. förljande tabeller: Datablad, Element och ElementTabell. Datablad beskriver ett datablad som kan innehålla ett/flera element och en typ av element kan vara en tabell (elementTabell). Ett datablad kan finnas på ett antal olika språk. Jag vill nu kopiera ett datablads element fast till ett annat språk (nya id's).
Det är inga problem att skapa en "kopia" av ett datablad med de element som det datablad man kopierar ifrån har. Problemet kommer när jag ska selecta de elementTabeller som fanns på tex. det svenska delen och som jag vill kopiera till den engelska. ElementTabeller är oftast ett flertal i varje datablad vilket gör det lite mer komplicerat (som jag ser det...). Jag har använt mig av formen: INSERT INTO (...) SELECT "nyttId",... FROM ... WHERE ... . Fältet "nyttId" skulle jag vilja hämta från tabellen Element, vilka jag precis kopierat in.

Hoppas det är förståeligt :), jag skulle gärna vilja ha en "bra" SQL-lösning på detta.

LarsGMedlem sedan dec. 200012 464 inlägg
#2
insert into element values ...
insert into elementTabell select @@identity, ... from elementTabell where ...

eller?

lolukokasosMedlem sedan mars 2001196 inlägg
#3

Relevanta fält i tabellerna ser ut så här:

DATABLAD
-dbId (primärnyckel)

ELEMENT:
-eleId (primärnyckel)
-eleTypId
-dbId

ELEMENTTABELL:
-eleTabId (primärnyckel)
-eleId

eleTypId i tabellen ELEMENT talar om vilken typ av element det är, kan vara bild,tabell, rubrik, brödtext osv.

När jag vill kopiera ett datablads element så är det en mängd element som inte alla är av typen elementTabell. I den datan som jag testar med har ett datablad 28 element varav 7 är av typen elementTabell.

Ska man skapa någon loop som kollar vilken typ av element det är vid varje INSERT i tabellen Element och som i fallet av typ elementTabell gör en INSERT i ElementTabell mha @@IDENTITY? Vad jag förstår så är väl @@IDENTITY bara aktuellt för den senaste INSERT'en, är det inte så?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Ok, då ser jag nog inget alternativ till en loop.

Jag blir lite fundersam på din datamodell. Borde inte språk ingå i nyckeln för element och elementTabell? I så fall skulle du inte behöva skapa nya id.

lolukokasosMedlem sedan mars 2001196 inlägg
#5

okej...
Ska överväga det där med att komplettera primärnyckeln med språkId. Det ger väl ett nytt problem, primärnyckeln är idag av formen "identity" (räknare) som inte får finnas mer än en gång. Det känns som man löser ett problem och skapar några fler. :q

Är det inte så att det blir en viss typ av redundans om man anger att ett Element är på ett visst språk fast man redan tidigare bestämt att Databladet är på ett visst språk? Likaså med ElementTabell, eller? :q

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)