funktion oder methode um stückweises lesen zu ermöglichen



  • ms sql kennt leider kein limit!!
    das ist mySQL, bei welchem dieser befehl funktioniert!!



  • Hallo

    dann solltest du dir mal die MS SQL Doku durchlesen. Hier bist du jedenfalls falsch. (Wenn es nicht bei der ADO-Komponente eine Eigenschaft gibt, um das einzustellen. Dann sollte es aber auch ein MS SQL-Schlüsselwort geben)

    bis bald
    akari



  • Diese Vorgehensweise macht m.E. nicht viel Sinn.

    Du kannst so nicht sicher stellen, dass ein Anwender zwischenzeitlich keinen DS einfügt, ändert oder löscht. Ergo würde Deine Routine versuchen, DS zu ändern, die schon geändert sind, oder DS auslassen, die noch zu ändern gewesen wären. Das kann in einem wunderschönen Datenchaos enden...



  • das ist nicht nötig!!das programm liest datensätze aus, datensätze ändern oder löschen ist nicht möglicht.
    mein problem liegt darin, dass ich daten vom ms sql server auf eine adere datenbank transferieren muss.
    ich habe es bisher so gemacht, dass es alle datensätze ausliest, in einen zweidimensionalen array schreib und schliesslich die insert-statements mit den daten aus dem array erzeugt.
    da sich aber nun bis zu einere million datensätze in der tabelle befinden, wird das ein bisschen schwierig, all diese daten in einenn array zu packen. das ziel wäre es nun, immer nur 10 oder 50 datensätze auszulesen, diese in der array zu schreiben und dann die insert statements generieren und abschicken.

    gruss trade



  • trade,

    der zu MySQL's LIMIT passende TSQL-Befehlt lautet TOP - z.B.:

    SELECT * TOP 10 FROM ...

    ... falls die Einwände von Joe_M für Dich nicht relevant sein sollten.



  • Den Zwischenschritt mit dem Array kannst Du doch getrost einsparen?!? Wozu machst Du nicht direkt einen Insert in die Zieltabelle?



  • mit top kann man doch nur die anzahl der obersten datensätze angeben, welche ausgelesen werden. also wenn ich sage "select * top 10 from balabla" dann gibt es mir die obersten 10 datensätze aus. beim limit aber kann man aber noch sagen von welchem datensatz an es soll die nächtsten 10 nehmen. limit 11,10 liest mir doch vom elften datensatz an 10 datensätze aus.

    wie funktioniert das mit top, wenn man z.b vom 21 datensatz an 20 datensätze auslesen will?

    😕

    gruss



  • trade schrieb:

    ... wie funktioniert das mit top, wenn man z.b vom 21 datensatz an 20 datensätze auslesen will?...

    gar nicht. Das mußt Du selbst anhand irgend einer Sortier-Reihenfolge und mit Hilfe eines Primärschlüssels selbst implementieren - unangenehm und kostet viel Prozessorlast auf dem Server, da die Sortierung natürlich immer über alle Datensätze der betreffenden Tabelle geht. Der neue MS-SQL-Server (Yukon) soll "Paging" wohl unterstützen, habe ich irgendwo gelesen.

    Edit:
    Alternative 1: die Menge aller Primärschlüssel in einen lokalen Puffer laden und diese dann Block-weise verarbeiten - auch nicht gerade schön.
    Alternative 2: Server-seitige CURSOR verwenden - kostet viel Traffic und Prozessorlast auf dem Server
    Alternative 3: über Alternativen nachdenken, da Paging prinzipiell an der Idee der Server-gestützten Datenbanken vorbei geht



  • Die Thematik in diesem Beitrag kommt mir so merkwürdig bekannt vor.
    Wenn Du tatsächlich alle Datensätze in irgendeiner Form bearbeiten willst, solltest Du Dir wirklich überlegen,
    ob Du das nicht datenbankseitig erledigen kannst, z.B. mit einer Stored Procedure.
    Vielleicht solltest Du auch einfach mal konkreter werden. Vielleicht gibt es ja für Dein Problem auch
    irgendeinen völlig anderen Lösungsweg als den, in den Du Dich gegenwärtig "verrannt" hast.

    Gruß,

    Alexander



  • @Jan und Alexander: 👍


Anmelden zum Antworten