Når insert-kommandoen er kørt skal alle manglende relationer være indsat, resulterende i 25 records i alt
Jeg har lavet et script der finder de relationer der overhovedet ikke er repræsenteret i relationen (nye grupper, nye forme), men mangler de som allerede er i brug.
Scriptet ser således ud:
select g.ID as gruppeID, f.ID as formID, 0, 0, 0, 0 from gruppe g join form f on (f.ID in (select distinct gfr2.formID from gruppeformrel gfr2)) where g.ID not in (select distinct gfr1.gruppeID from gruppeformrel gfr1)
Resultat på ovenstående: ------------------------ 4,50 5,50
Hvis du allerede har gemt nogle relationer, burde overstående script kunne ændres til ikke at vise de allerede eksisterende, og derved kun give dig de manglende.
Jeg ville nok vælge bare at slette alle gemte relationer, også oprette dem igen ud fra "find alle relationer" scriptet.
Relationen indeholder samtidig adgangsrettigheder m.m. for den pågældende gruppe/form relation, så jeg kan ikke slette dem. Måske ender jeg med en SProc så det holdes på serversiden.
sjang: Nu er ovenstående bare et eksempel. Mine id'er er identity startende fra 1 og tæller op med 1. Kan måsle caste det til en streng så der sammenlignes på "000001000023" i stedet for sammensatte nøgle 24 - eller noget lignende.
Ja det ville nok egentlig være mere sikkert. Fx sådan her:
INSERT INTO GruppeFormRel SELECT g.ID, F.ID FROM Gruppe g CROSS JOIN Form f WHERE CAST(g.ID AS VARCHAR(50)) + '-' + CAST(f.ID AS VARCHAR(50)) NOT IN (SELECT CAST(GruppeId AS VARCHAR(50)) + '-' + CAST(FormId AS VARCHAR(50)) FROM GruppeFormRel)
ja varchar(10) vil nok være rigeligt... jeg har bare varchar(50) siddende på fingrespidserne, så det er såmænd bare derfor jeg valgte det.
Et cross-join laver et krydsprodukt over alle kombinationsmuligheder. Dvs at hver række i den venstre tabel, sammensættes med alle rækkerne fra den højre tabel. Dvs, at antallet af rækker i den resulterende tabel bliver a X b, hvor a er antallet af rækker i den ene tabel, og b er antallet af rækker i den anden tabel. I dit tilfælde vil cross-join'et præcis indeholde de 25 kombinationsmuligheder/relationer der i alt er.
Og ja, jeg vil bestemt mene at et cross join også findes på sql 2000
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.