Hi, ich habe eine prinzipielle Technik-Frage:
Angenommen ich habe eine Artikel-Tabelle mit 3000 Artikeln, Key auf ART_NR, und habe nun eine Liste von 1000 Artikel-Nummern zu denen ich Details aus der Artikel-Tabelle abfragen möchte. Das SELECT dazu ist letzlich einfach:
SELECT * FROM ARTIKEL WHERE ART_NR IN (A1, A2, A3 usw.)
Diese Abfrage konstruiere ich in DELPHI, der '()'-Teil ist ein String erstellt aus der Liste. Meine Erfahrung mit Interbase hat mir gezeigt, daß dies Abfrage relativ langsam ist - ein StoredProcedure die aus dem String eine Tabelle macht und dann per JOIN mit der Artikel-Tabelle verbunden wird war bei mir immer schneller auch wenn der Aufwand größer war. Nun kann ich in INTERBASE eine SP in einen JOIN aufnehmen, in MS-SQL ist mir das noch nicht gelungen. Ich kann zwar in der SP eine temporäre, indizierte Tabelle erstellen, diese dann als SELECT von der SP zurüchgeben lassen, jedoch die Ergebnismenge anscheinend nicht in einen JOIN aufnehmen !
Vielleicht ist der ganze Aufwand nicht nötig und der MS SQL-Server macht aus einem 'IN ( )' sowieso eine temporäre Tabelle die er dann mittels JOIN intern verknüpft. Leider habe ich dazu noch nichts gefunden.
Hat jemand eine IDEE wie sich dieser Fall am elegantesten und effektivsten Lösen läßt ?
Tobias
Angenommen ich habe eine Artikel-Tabelle mit 3000 Artikeln, Key auf ART_NR, und habe nun eine Liste von 1000 Artikel-Nummern zu denen ich Details aus der Artikel-Tabelle abfragen möchte. Das SELECT dazu ist letzlich einfach:
SELECT * FROM ARTIKEL WHERE ART_NR IN (A1, A2, A3 usw.)
Diese Abfrage konstruiere ich in DELPHI, der '()'-Teil ist ein String erstellt aus der Liste. Meine Erfahrung mit Interbase hat mir gezeigt, daß dies Abfrage relativ langsam ist - ein StoredProcedure die aus dem String eine Tabelle macht und dann per JOIN mit der Artikel-Tabelle verbunden wird war bei mir immer schneller auch wenn der Aufwand größer war. Nun kann ich in INTERBASE eine SP in einen JOIN aufnehmen, in MS-SQL ist mir das noch nicht gelungen. Ich kann zwar in der SP eine temporäre, indizierte Tabelle erstellen, diese dann als SELECT von der SP zurüchgeben lassen, jedoch die Ergebnismenge anscheinend nicht in einen JOIN aufnehmen !
Vielleicht ist der ganze Aufwand nicht nötig und der MS SQL-Server macht aus einem 'IN ( )' sowieso eine temporäre Tabelle die er dann mittels JOIN intern verknüpft. Leider habe ich dazu noch nichts gefunden.
Hat jemand eine IDEE wie sich dieser Fall am elegantesten und effektivsten Lösen läßt ?
Tobias
Comment