webForumDet fria alternativet

Insert i flera tabeller

9 svar · 276 visningar · startad av KalsongCesar

KalsongCesarMedlem sedan mars 2001339 inlägg
#1

Jag har en Tabell med vanlig information, texom en person.
Den personen ska ha ett antal leksaker så då har jag lagt upp två tabeller till en som håller nyckeln till personen samt nyckeln till leksakernas tabell. Sist så har jag en tabell då som håller informationen om leksakerna.
Är detta rätt uplägg om man vill ha en struktur som gör att en post i huvudtabellen kan ha flera tillhörande poster i en annan.

Frågan är ju då, hur man skriver för att göra en inster i dessa tabeller så att all information.

Inser into person (namn) value (kalle)
Insert into leksaker (id,typ) value (@@identity, brandbil)

men det blir ju inte rätt för den tabellen mellan dessa måst ju få både @@identity från person och leksaker...

hmm tips, vad ska jag söka på , eller ett exempel.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Upplägget är riktigt

Om du bara har en leksak så kand du göra


Inser into person (namn) values ('kalle')
Insert into leksaker (id,typ) select  @@identity, 'brandbil'

annars så får du göra

select @@identity

och lagra det i en lokal variabel.

KalsongCesarMedlem sedan mars 2001339 inlägg
#3

Tack.. jag har prövat nu.. med lite blanda problem och lösningar..

vad heter det jag håller på med så jag kan söka lite vidare om ämnet och hur man kan tänka.

Ngn som har en lite fin procedur eller sql sats som den kan bjuda på så jag ser om jag har lagt upp det rätt..

Blir det fler exekveringar av sql strängen eller kan man få ihop den på en och samma?

Jonas

KalsongCesarMedlem sedan mars 2001339 inlägg
#4

Det går inte att skriva??

INSERT INTO person (namn) VALUES  ('arne')
SELECT     @@Identity AS id_namn

INSERT  INTO  leksak(type) VALUES  ('pistol')
SELECT  @@Identity AS id_leksak

INSERT INTO person_leksak (idx_person, idx_leksak) VALUES     (id_namn, id_leksak)

Fast jag vill ju lägga in fler leksaker per person på en ggn..

hmm

LarsGMedlem sedan dec. 200012 464 inlägg
#5
declare @pid int, @lid int
INSERT INTO person (namn) VALUES  ('arne')
SELECT @pid =  @@Identity

INSERT  INTO  leksak(type) VALUES  ('pistol')
SELECT  @lid = @@Identity 

INSERT INTO person_leksak (idx_person, idx_leksak) VALUES     (@pid,@lid)

Här finns allt man behöver veta om T-sql.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_5t9v.asp

KalsongCesarMedlem sedan mars 2001339 inlägg
#6

jag har lagt ditt kodexempel i en store procedure, men den klagar när jag kör den i Q A. Den säger att
INSERT statement conflicted with COLUMN FOREIGN KEY constraint

ngn som vet?

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Hur är tabellerna definerade ?

Vilka foreign keys finns det?

Vilken tabell får du fel på?

Om du har foreign keys så innebär det att du inte kan lagra data i en kolumn om inte motsvarande värde finns i motsvarande kolumn i den refererade tabellens primary key/unique.

KalsongCesarMedlem sedan mars 2001339 inlägg
#8

ok.
jag har person då med nyckel idx_person
och leksak med idx_leksak
mellan dessa då är det person_leksak med motsvarande namn som foreign keys. idx_person och idx_leksak.

Ska jag inte ha så eller? Värdet borde ju finnas i person för jag lägger ju till person och leksak och därefter deras nyckeltal som värden i person_leksak

Nu var ju person och leksak namn som jag hittade på för att det inte skulle bli så konstigt.. men nu ser det ju bara oseriöst ut istället ;)

KalsongCesarMedlem sedan mars 2001339 inlägg
#9

får felet i person och column idx_person.
Men jag kollar i databasen så har namnet och leksaken lagts till det är koppling de emellan som inte har fastnat.

KalsongCesarMedlem sedan mars 2001339 inlägg
#10

tog bort relationerna och nu funkar det fint.. skiter i den!

Tack så mycket LarsG..

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