30. marts 2006 - 09:16Der er
20 kommentarer og 1 løsning
fra inner Join til Tabel1.ID=Tabel2.ID
Hvordan laver jeg min select om, sådan at jeg ikke behøver at lave joins på denne måde? Der er nemlig ingen relationer mellem mine tabeller så der udskrives ikke noget når min select ser ud på denne måde.
min select skulle gerne gøre det at den skriver alle de tabeller som ud som har en reference til @tablename samt deres ID og reference ID.
testDB.dbo.sysforeignkeys FK kan godt undlades
SELECT SO1.name AS Tab, SC1.name AS Col, SO2.name AS RefTab, SC2.name AS RefCol, FO.name AS FKName FROM testDB.dbo.sysforeignkeys FK INNER JOIN testDB.dbo.syscolumns SC1 ON FK.fkeyid = SC1.id AND FK.fkey = SC1.colid INNER JOIN testDB.dbo.syscolumns SC2 ON FK.rkeyid = SC2.id AND FK.rkey = SC2.colid INNER JOIN testDB.dbo.sysobjects SO1 ON FK.fkeyid = SO1.id INNER JOIN testDB.dbo.sysobjects SO2 ON FK.rkeyid = SO2.id INNER JOIN testDB.dbo.sysobjects FO ON FK.constid = FO.id where SO2.name=@cTableName
DECLARE @cTableName NVARCHAR(50) SET @cTableName = 'Licences'
SELECT SO1.[name] AS Tab, SC1.[name] AS Col, SO2.[name] AS RefTab, SC2.[name] AS RefCol, FO.[name] AS FKName FROM testDB.dbo.sysforeignkeys FK, testDB.dbo.syscolumns SC1, testDB.dbo.syscolumns SC2, testDB.dbo.sysobjects SO1, testDB.dbo.sysobjects SO2, testDB.dbo.sysobjects FO
WHERE FK.fkeyid = SC1.[id] AND FK.fkey = SC1.colid AND FK.rkeyid = SC2.[id] AND FK.rkey = SC2.colid AND FK.fkeyid = SO1.[id] AND FK.rkeyid = SO2.[id] AND FK.constid = FO.[id] AND SO2.[name]= @cTableName
Men inner join virker vel kun hvis det er en relationel database... formoder jeg...Hmmm kom lige i tanke om at jeg ikke har tjekket på den rigtige database... Jeg vender lige tilbage
Til min kommentar omkring at jeg hader Inner Join, så er det kun sætningen med Inner Join jeg hader ;o) Bare lige inden nogen hakker mig helt ned... Hehe
Jeg er i gang med at afprøve... men det vare lige lidt for jeg har 3 SQL scripts der lige skal passe sammen, Men hvis du har testet på en "ikke relationel database" så virker det sikkert også hos mig.. Kører også MSSQL2000
Jeg venter bare til du har afprøvet det. :) Bare fordi det virker hos mig, er det ikke sikkert det virker hos dig. Det er jo trodsalt IT vi har med at gøre :-)
Hmmm den udskriver ikk noget... kan det være noget med sysforeignkeys FK for jeg har ikk nogle relationer eller nøgler...
SELECT SO1.[name] AS Tab, SC1.[name] AS Col, SO2.[name] AS RefTab, SC2.[name] AS RefCol, FO.[name] AS FKName FROM testDB.dbo.sysforeignkeys FK, testDB.dbo.syscolumns SC1, testDB.dbo.syscolumns SC2, testDB.dbo.sysobjects SO1, testDB.dbo.sysobjects SO2, testDB.dbo.sysobjects FO
WHERE FK.fkeyid = SC1.[id] AND FK.fkey = SC1.colid AND FK.rkeyid = SC2.[id] AND FK.rkey = SC2.colid AND FK.fkeyid = SO1.[id] AND FK.rkeyid = SO2.[id] AND FK.constid = FO.[id] AND SO2.[name]='Person'
Det vil jeg formode, fordi hvis du ikke har nogen relationer, vil der ikke stå noget i din foreignkeys tabel. Hvis den er tom, vil denne sql statement slet ikke virke.
Det du prøver på at opnå, er en oversigt over de tabeller som hænger sammen med hinanden, ik? Du vil jo ikke kunne se hvad der hænger sammen, når der ikke er relationer til at forbinde tabellerne.
men hvis det ikke var system tabeller, så ville man jo godt kunne fange referencerne, så jeg tænkte at det måske også kunne gøres når det drejede sig om system tabeller
Ok smider lige noget senere..Er på arbejdet så ved ikke lige om jeg må ligge noget
Synes godt om
Ny brugerNybegynder
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.