Avatar billede simsen Mester
05. juli 2012 - 18:47 Der er 7 kommentarer og
1 løsning

Problemer med at indsætte foreignkeys i en tabel

Hej,

Jeg har følgende tabeller:
ResourceControls
...resourceControlId - int (nøgle)
...resourceControlName - nvarchar(250)
...resourcePageId - int

ResourceLanguages
...languageId - int (nøgle)
...languageName - nvarchar(50)
...textvalue - nvarchar(250)

ResourceText
...resourceControlId - int(sammensat nøgle)
...languageId - int (sammensat nøgle)
...textvalue - nvarchar(250)

Nu vil jeg så tilføje nøgler - altså foreignkeys i ResourceText
men jeg får fejl hvergang jeg forsøger.

Jeg højreklikker i Management Studio på tabellen ResourceText i Keys delen og vælger New Foreign key. Nu vælger jeg så REsourceControls som primær tabel og her primær key er resourceControlId - i Foreign key tabellen vælger jeg ResourceText og resourceControlId som nøgle og klikker nu ok

Når jeg forsøger at gemme dette får jeg følgende fejl:

'ResourceControls' table saved successfully
'ResourceText' table
- Unable to create relationship 'FK_ResourceText_ResourceControls'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_ResourceText_ResourceControls". The conflict occurred in database "Ansi", table "dbo.ResourceControls", column 'resourceControlId'.

Nogen der kan fortælle mig, hvordan jeg får lavet en reference til de to tabeller, som er en sammensat nøgle i ResourceText?

mvh
simsen :-)
Avatar billede janus_007 Nybegynder
05. juli 2012 - 23:37 #1
Sådan her..

Jeg har ikke lige omskrevet til create table, det kan du selv gøre, men:

create table ResourceControls
...resourceControlId - int primary key....
...resourceControlName - nvarchar(250)
...resourcePageId - int

create table ResourceLanguages
...languageId - int primary key....
...languageName - nvarchar(50)
...textvalue - nvarchar(250)

create table ResourceText
...resourceControlId - int foreign key references ResourceControls(resourceControlId)
...languageId - int foreign key references ResourceLanguages(languageId)
...textvalue - nvarchar(250)

Skriv tabellerne i t-sql istedet... det er nemmere og giver ikke sære problemer med drop/ create table og constraints.
Avatar billede simsen Mester
06. juli 2012 - 10:55 #2
Hej Janus,

Nu er det tabeller der eksisterer i forvejen, så jeg kan ikke lave dem igen (der er en del data i dem, som bliver brugt i andre systemer også).

Men sådan som jeg ser, det du gør, er at slette primary keys i ResourceText og kun lave dem til foreign keys - er dette korrekt?
Avatar billede simsen Mester
06. juli 2012 - 11:03 #3
Det hjalp så heller ikke
Avatar billede simsen Mester
06. juli 2012 - 14:54 #4
Hej Janus,

Smid et svar, da du fik mig til at se i den rigtige retning.

Problemet har ligget i, at de rækker jeg har smidt ind i de forskellige tabeller, ikke er i overens med det jeg gerne ville have.

Så det jeg har gjort - er at fjerne ALLE rækker (for alle 5 tabeller) og har sat det op med foreign keys.

Og nu kører det som smut. Nu skal jeg så bare igemmen alle 5 tabeller og sætte dem ind manuelt, og derved forhåbentligt finde de keys som ikke er gyldige.....
Avatar billede Syska Mester
06. juli 2012 - 15:15 #5
Det kan du gøre med SQL også ... Dvs ... finde dem som ikke kan joines på deres parent table. Noget ala


SELECT * FROM child LEFT JOIN parent ON child.ParentId = parent.Id WHERE parent.Id IS NULL

Det burde gerne give dig alle child rows som ikke har en parent.

Det er nemmere end at gøre det manuelt

( Overstående er ikke testet men burde virke )
Avatar billede janus_007 Nybegynder
06. juli 2012 - 21:07 #6
Godt du kunne bruge det :)
Avatar billede simsen Mester
08. juli 2012 - 21:15 #7
Husk at skrive et svar Janus :-)
Avatar billede simsen Mester
14. september 2012 - 13:15 #8
Vil du have pointsene Janus - så må du lige råwe efter mig - men igen tak for svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester