bigpoint Geschrieben 6. August 2003 Geschrieben 6. August 2003 Ich update eine Tabelle, das ganze mache ich mit einem cursor es funktionier auch ist nur sehr sehr langsam, kann ich es vielleicht auch auf eine andere weise lösen, hier cod declare @ma int,@mo int,@abr int,@p int set @ma = 2 set @mo = 1224 set @abr = 300200013 set @p = 230719 declare upd_cursor cursor for select ma,mo,abr,p from Tabel where ma=@ma and mo=@mo and abr=@abr and p=@p open upd_cursor fetch next from upd_cursor into @ma,@mo ,@abr ,@p while @@fetch_status = 0 begin UPDATE [Tabel] SET [xyz]=111 WHERE [Ma]= @ma and [Mo]= @mo and [Abr]= @abr and [P]= @p fetch next from upd_cursor into @ma,@mo ,@abr ,@p end [/PHP] Vielen Dank Zitieren
Wolle Geschrieben 6. August 2003 Geschrieben 6. August 2003 Och 007ski... Gewöhn dir doch mal an, das du dazuschreibst welche Datenbank du meinst. Bei jedem Thread von dir muß erst nachgefragt werden. Siehe auch hier: http://www.fachinformatiker-world.de/forums/announcement.php?s=&forumid=18&announcementid=14 Ich weiß, das du den Microsoft SQL Server 2000 meinst, weil ich hier sowieso alles lese, bei anderen ist das vielleicht der erste Thread den sie von dir lesen. Zitieren
bigpoint Geschrieben 6. August 2003 Autor Geschrieben 6. August 2003 Original geschrieben von Wolle Och 007ski... Gewöhn dir doch mal an, das du dazuschreibst welche Datenbank du meinst. Bei jedem Thread von dir muß erst nachgefragt werden. Siehe auch hier: http://www.fachinformatiker-world.de/forums/announcement.php?s=&forumid=18&announcementid=14 Ich weiß, das du den Microsoft SQL Server 2000 meinst, weil ich hier sowieso alles lese, bei anderen ist das vielleicht der erste Thread den sie von dir lesen. SORRY :eek: es tut mir wirklich leid, aber glaube mir ich arbeite dran und ja es ist Microsoft SQL Server 2000 Zitieren
AxlHammer Geschrieben 6. August 2003 Geschrieben 6. August 2003 Hallo 007ski, ich hab zwar noch nichts mit PHP gemacht, aber meinen SQL-Kenntnissen zufolge kannst du den ganzen Cursor weglassen und einfach einmal das Update-Statement ausführen, das würde glaub ich schon reichen... Versuchs doch mal. Gruß, Axl Zitieren
bigpoint Geschrieben 6. August 2003 Autor Geschrieben 6. August 2003 Original geschrieben von AxlHammer Hallo 007ski, ich hab zwar noch nichts mit PHP gemacht, Gruß, Axl ich auch nicht die Sache hat sich schon aber erleidigt Vielen Dank Zitieren
beetFreeQ Geschrieben 6. August 2003 Geschrieben 6. August 2003 Original geschrieben von AxlHammer Hallo 007ski, ich hab zwar noch nichts mit PHP gemacht, aber meinen SQL-Kenntnissen zufolge kannst du den ganzen Cursor weglassen und einfach einmal das Update-Statement ausführen, das würde glaub ich schon reichen... Versuchs doch mal. Gruß, Axl Ähm - mit PHP hat das auch nix zu tun... - das ganze ist nämlich Transact SQL und so ein Cursor wird meistens verwendet, um durch eine Datenmenge durchzugehen und für jeden Datensatz bestimmte Aufgaben zu erledigen... Allerdings haste recht, ich sehe hier auch keinen Grund, einen Cursor zu verwenden... - aber warum einfach, wenn's auch kompliziert geht ... Zitieren
bigpoint Geschrieben 11. August 2003 Autor Geschrieben 11. August 2003 Original geschrieben von beetFreeQ Allerdings haste recht, ich sehe hier auch keinen Grund, einen Cursor zu verwenden... - aber warum einfach, wenn's auch kompliziert geht ... kannst Du bitte auch vieleich die einfache Methode verraten Allerdinks müß ich dazu eine korektur des codes machen declare @ma int,@mo int,@abr int,@p int set @ma = 2 set @mo = 1224 declare upd_cursor cursor for select ma,mo,abr,p from Tabel where ma=@ma and mo=@mo and abr=@abr and p=@p open upd_cursor fetch next from upd_cursor into @ma,@mo ,@abr ,@p while @@fetch_status = 0 begin /* hier wird aber noch eine SP aufgerufen die mir einen wert lierert bzw berechnet @wert der für jeden @p und @abr anderes ist */ UPDATE [Tabel] SET [xyz]=@wert WHERE [Ma]= @ma and [Mo]= @mo and [Abr]= @abr and [P]= @p fetch next from upd_cursor into @ma,@mo ,@abr ,@p end [/PHP] Zitieren
beetFreeQ Geschrieben 11. August 2003 Geschrieben 11. August 2003 Original geschrieben von 007ski kannst Du bitte auch vieleich die einfache Methode verraten Allerdinks müß ich dazu eine korektur des codes machen declare @ma int,@mo int,@abr int,@p int set @ma = 2 set @mo = 1224 declare upd_cursor cursor for select ma,mo,abr,p from Tabel where ma=@ma and mo=@mo and abr=@abr and p=@p open upd_cursor fetch next from upd_cursor into @ma,@mo ,@abr ,@p while @@fetch_status = 0 begin /* hier wird aber noch eine SP aufgerufen die mir einen wert lierert bzw berechnet @wert der für jeden @p und @abr anderes ist */ UPDATE [Tabel] SET [xyz]=@wert WHERE [Ma]= @ma and [Mo]= @mo and [Abr]= @abr and [P]= @p fetch next from upd_cursor into @ma,@mo ,@abr ,@p end [/PHP] [/b] Achso - du berechnest den Wert immer neu... - so wie's im ersten Code aussah, wolltest du doch das feld xyz überall mit 111 belegen - und das wäre auch einfacher gegangen... - wenn du aber mit einer SP den Wert für das Feld ermittelst, geht's wohl nicht ohne Cursor... Zitieren
bigpoint Geschrieben 12. August 2003 Autor Geschrieben 12. August 2003 Original geschrieben von beetFreeQ Achso - du berechnest den Wert immer neu... - so wie's im ersten Code aussah, wolltest du doch das feld xyz überall mit 111 belegen - und das wäre auch einfacher gegangen... - wenn du aber mit einer SP den Wert für das Feld ermittelst, geht's wohl nicht ohne Cursor... schade, weil es ganz langsam ist und ich dachte .... vielleich kann man es beschleinigen Zitieren
beetFreeQ Geschrieben 12. August 2003 Geschrieben 12. August 2003 Original geschrieben von 007ski schade, weil es ganz langsam ist und ich dachte .... vielleich kann man es beschleinigen Naja, mit etwas Glück hilft es, die Tabelle mit einigen Indexen (oder wie heißt da die Mehrzahl? ) zu bestücken. Am Besten legst du welche auf die Spalten, nach denen du selektierst... Ansonsten könntest du die Stored Procedure, die du da zwischendurch ausführst, ja mal posten - vielleicht braucht die ja schon länger als nötig! Hast du die Ausführung des Codes schonmal im SQL Profiler analysiert? Da kann man meistens ganz gut erkennen, wo die Engstellen liegen... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.