Avatar billede hrc Mester
25. oktober 2010 - 12:54 Der er 2 kommentarer og
1 løsning

Same table constraint brokker sig ved insert

Min tabel har en fremmednøgle der peger på tabellen selv. Der er oprettet en "same table" constraint.

Problemet opstår i forbindelse med en datakonvertering hvor har valgt at holde det i én stor transaktion. Den går tilsyneladende ikke længere. Det pudsige er, at sætter jeg fremmednøglen ind efter der er comitted, så fejler den stadivæk. Kun når jeg bruger Management studio (og dermed en anden session?) kan jeg rette fremmednøglerne til med en stak "updates".

Burde man ikke kunne referere til andre records i samme tabel, hvis det er i samme transaktion?
Avatar billede mcb2001 Nybegynder
25. oktober 2010 - 14:43 #1
Jeg har aldrig set en løsning hvor det er et krav at henvise til "same table". Det giver næsten altid noget rod.

Jeg plejer istedet at oprette en tabel jeg navngiver noget simpelt, så som
tabelnavn_tabelnavn og så laver to "foreign keys" på to felter, og laver en primary key hen over begge (så man ikke få den samme entry to gange).

Så er du helt uden om at skulle oprette den ene før den anden og sikre dig at de peger korrekt og så videre. Så gør du istedet det at du opretter første, opretter anden og så linker dem.
Avatar billede hrc Mester
25. oktober 2010 - 14:47 #2
I dette tilfælde er det en faktura der krediteres med en faktura med beløbet negeret.
Avatar billede hrc Mester
25. oktober 2010 - 18:47 #3
Gætter på disse to løser det (kan først teste i morgen):
alter table <table> nocheck constraint <const.name>

og

alter table <table> check constraint <const.name>
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