Zum Inhalt springen

update


bigpoint

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :rolleyes:

und ja es ist Microsoft SQL Server 2000

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...