06. december 2006 - 14:58Der er
15 kommentarer og 1 løsning
Hurtigere måde at opdatere et felt
Opdateringen sker vha. et script i SQL Server Analyzer og tager ca. 2½ time at gennemløbe ca. 430.000 poster fordelt i 6 tabeller. (ER det nødvendigt at bruge cursors?)
Script:
USE myDatabase
SET DATEFIRST 1
DECLARE @Tabel_var as varchar(255), @Dato_var as varchar(255)
DECLARE myDatabase_cursor CURSOR FOR SELECT Dato FROM [myTAble]
OPEN myTable_cursor
FETCH NEXT FROM myDatabase_cursor INTO @Dato_var
WHILE @@FETCH_STATUS = 0 BEGIN UPDATE [myTable] SET UGE = DATEPART(week, @Dato_var) WHERE Dato = @Dato_var FETCH NEXT FROM myDatabase_cursor INTO @Dato_var END
CLOSE myDatabase_cursor DEALLOCATE myDatabase_cursor
Jo, det gør de... Hold da helt ¤#&&%¤ hvor går det stærkt! Lige hvad jeg havde brug for, nu mangler der kun én ting: Det er ikke den korrekte ugedag der skrives i feltet... F.eks. bliver 10-10-2005 til uge 42 - i følge kalenderen i Outlook var det uge 41.
Hvis jeg kører følgende gentagende gange, viser den at DATEFIRST rigtigt nok bliver sat som den skal PRINT @@DATEFIRST SET DATEFIRST 1 GO PRINT @@DATEFIRST
Men af en eller anden årsag slår det ikke igennem i UPDATE [myTable]......
Umiddelbart kan jeg bare trække 1 fra, men så er der et andet problem: Det er ikke nok med ugenummeret, der skal også hægtes et årstal på, fra samme felt, Dato.
IW virker ikke...(jeg bruger SQL Server 2000)....har du en ide til hvordan jeg får sammensat datoen til YYMM? DATEPART(year,[dato]) + DATEPART(week, [dato]) - 1
Lige hvad jeg havde brug for...i mellemtiden har jeg erfaret at trick'et med at trække 1 fra ugenummeret virker fint fra primo januar 2005, men f.eks. vil 30/12-2004 blive til uge nummer 52, hvilket er forkert, skulle have været uge 53! :(
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.