Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Datensatz suchen, mit SQL Integrität prüfen

  Alt 23. Apr 2006, 10:48
Zitat von Jelly:
Das halte ich für einen total misslungenen Versuch, noch eine weitere Lösung zu suchen. Deine SP schlägt fehl, nämlich an 2 Stellen:
1. Was, wenn die ID=-1 tatsächlich in der Tabellenspalte ID existiert
Manno, dann eben auf -1000, NULL, 123234545 oder sonstwas prüfen.
Zitat von Jelly:
2. Was, wenn mehrere Datensätze mit der gesuchten ID existieren. Dann gibts wohl ne Exception
Bei mySQL weiss ich das nicht, bei MSSQL jedenfalls nicht. Aber es gibt doch ein 'Select TOP 1' oder so auch bei mySQL, oder?

Zitat von Jelly:
select count(id) as N from Tabelle where id = 123
Und was ist, wenn es 1000000 Einträge der ID=123 gibt? Dann dauert die Integritätsprüfung ziemlich lange... Ist natürlich weit hergeholt, entspricht aber deinem Kritkniveau. Aggregatfunktionen sollten nicht für solche fundamentalen Abfragen auf Integrität verwendet werden, dafür sind sie einfach nicht gedacht. Aber klar, gehen tut alles.

Soweit ich weiss, gibt es einen exists-Operator bei SQL, inwieweit mySQL das kann, weiss ich aber nicht:
If Exists (select * from Tabelle where id = 123) Das bricht sofort ab, sobald ein Eintrag gefunden wurde, vermeidet also den Extemfall der 1000000 Einträge von Jellys Idee.

Falls mySQL das nicht kennt, würde ich Hansas Version verwenden. Sie ist dann optimal (sofern es ein "Select TOP 1") gibt.

Natürlich muss die Spalte IDE indiziert sein, das nur so am Rande.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat