AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SELECT ... INTO [Table] mit Primärschlüssel
Thema durchsuchen
Ansicht
Themen-Optionen

SELECT ... INTO [Table] mit Primärschlüssel

Ein Thema von süden · begonnen am 30. Dez 2013 · letzter Beitrag vom 31. Dez 2013
Antwort Antwort
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#1

SELECT ... INTO [Table] mit Primärschlüssel

  Alt 30. Dez 2013, 19:04
Datenbank: SQL SERVER • Version: 2005 • Zugriff über: ADO
Hallo,
mein Programm muß SQL-Server und Access unterstützen.
Deshalb alle SQL's im Programm (später vielleicht mal differenzierter).

Ich möchte eine temporäre Tabelle erstellen, damit das SQL Statement nicht zu kompliziert wird.

Code:
sqlText := 'SELECT x,y INTO [tempTabelle]
Die Anzahl der Datensätze von 100 - 500.000
Die Performance der tempTable ist grausam, ich denke weil sie keinen Index hat.

Fragen:
Gibt es eine Möglichkeit direkt einen Index zu erstellen? Oder muß ich den hinterher in die tempTable einbauen?

Oder ist ein Create Table mit Autowertspalte und Index + anschließender Einfüge- SQL besser?

(Habe ich mich verständlich ausgedrückt? Ich bin etwas im Stress)
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 30. Dez 2013, 19:42
Ich habe das Problem von zu komplexen SQL-Statements immer mit Views gelöst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 30. Dez 2013, 19:47
Die Syntax Deines Statements ist etwas merkwürdig. Woher sollen den die Werte kommen?
Select mit Insert into sollte ungefähr so aussehen:
Code:

INSERT INTO <tempTABLE>
  (UsedCol1, UsedCol2)
SELECT NeededCol1, NeededCol2
  FROM liveTABLE
 [WHERE condition]
Du hast keine Where Bedingung, die die Daten aus der Quelltabelle einschränken würde. Also macht ein Index überhaupt keinen Sinn (auf der Quelltabelle). Bei einem Masseninsert (sowas ist es ja) ist jeglicher Index auf der Zieltabelle eine Bremse, auch der Primärschlüssel bzw dessen Index. (die man meist in Kauf nimmt).

Also ist das Insert-Statement wirklich richtig hier her kopiert oder hast Du das anonymisiert?

P.S.: hab nicht richtig aufgepasst, eine Temp Table wird natürlich on the fly erzeugt und die Syntax kann vereinfacht werden. Ein "From" sollte im Select trotzdem drin stehen.

P.S.2: Ich geh mal davon aus, Du meinst die Performanceprobleme beim Erstellen der Temp Table.
Gruß, Jo

Geändert von jobo (30. Dez 2013 um 19:56 Uhr)
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#4

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 30. Dez 2013, 20:02
Ich hatte die SQL etwas abgekürzt - das war natürlich mißverständlich.

Code:
SELECT x,y FROM TableQ into TableZ
Das Abrufen von 50.000 Datenzeilen (zur Kontrolle) aus TableZ ist langwierig.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 30. Dez 2013, 20:36
Die Syntax ist 'select * into TempTable from OtherTableOrView'.

Temporäre Tabellen in MSSQL sind -glaube ich- etwas anderes als in Access. Bei MSSQL beginnt eine temporäre Tabelle mit einem '#' und existiert nur innerhalb der Session. Soweit ich das sehe, existiert das in Access so nicht. Also würdest Du eine permanente Hilfstabelle erstellen, um zu beiden Welten kompatibel zu sein.

Ich habe mehrere Fragen:
1. Warum muss es Access sein? Ginge auch SQL-Compact oder eine lokale SQL-Express Installation?
2. Wie sehen die Queries aus? Weshalb sind sie so komplex?

Ich persönlich würde nicht versuchen, über ein SQL-Statement beide Welten zu bedienen. Versuche lieber, die Stärken beider Welten individuell auszunutzen sowie die Schwächen zu kaschieren. Während Du mit SQL-Server sehr mächtige Werkzeuge hast (hier würde ich anstatt einer temporären Tabelle vielleicht ein CTE oder eben eine View verwenden), musst Du bei Access die Aktionen vielleicht in-Memory durchführen, weil Access-SQL nicht so viele Möglichkeiten bietet und -soweit ich mich erinnere- etwas eigen ist.
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#6

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 31. Dez 2013, 09:15
Zitat:
Ich habe mehrere Fragen:
1. Warum muss es Access sein? Ginge auch SQL-Compact oder eine lokale SQL-Express Installation?
2. Wie sehen die Queries aus? Weshalb sind sie so komplex?
zu 1)
Die ewig alte Diskussion. Wir Entwickler sind nicht allein. Was die Kunden wünschen, bekommen sie. Meine Kunden sind Architektur und Ingenieubüros; die sind sehr beständig und arbeiten z.T. noch mit DOS Programmen. Im Prinzip finde ich es gut, was läuft das läuft wenns genügt.

Access ist Tradition, vertraut, bekannt. Und ich finde - im Rahmen - ganz gut. Aber nicht meine Wahl sondern die der Kunden. Es laufen noch alte Programme mir Access.
Ich versuche den Umstieg näher zu bringen über SQL-Server. Das ist auch bekannt, viele haben Respekt vor ihm und trauen sich nicht ran. Ich leiste Überzeugungsarbeit und seit den Express-Verionen gelingt es immer besser.

zu 2)
Die Queries sind dazu da, eine Art Controlling zu bringen.
Das heißt, aus vielen Tabellen werden Zusammenfassungen erstellt, und zusätzlich noch Berechnungen (MwSt,wenn-dann-Szenarien usw.).
Die Queries hier vorzustellen würde zu weit führen.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#7

AW: SELECT ... INTO [Table] mit Primärschlüssel

  Alt 31. Dez 2013, 09:18
Nachtrag:

Zitat:
Die Syntax ist 'select * into TempTable from OtherTableOrView'.
Wieso funktioniert dann meine Syntax?
SELECT x,y FROM TableQ into TableZ
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz