Avatar billede dougheffernan Nybegynder
06. december 2006 - 14:58 Der 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
Avatar billede teepee Nybegynder
06. december 2006 - 15:15 #1
Kommer dato og uge fra samme tabel?
Hvorfor ikke bare:
UPDATE [myTable] SET UGE = DATEPART(week, dato)
Avatar billede dougheffernan Nybegynder
06. december 2006 - 15:33 #2
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.
Avatar billede dougheffernan Nybegynder
06. december 2006 - 15:36 #3
Det er som om SQL Analyzer springer linien SET DATEFIRST 1 over
Avatar billede teepee Nybegynder
06. december 2006 - 15:38 #4
prøv at skrive
SET DATEFIRST 1
GO
, men jeg ved ikke om det virker
Avatar billede dougheffernan Nybegynder
06. december 2006 - 15:43 #5
:(
Det gør det ikke
Avatar billede dougheffernan Nybegynder
06. december 2006 - 15:46 #6
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]......
Avatar billede dougheffernan Nybegynder
06. december 2006 - 16:01 #7
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.

Det skal være på formen YYMM.
Avatar billede teepee Nybegynder
06. december 2006 - 16:03 #8
Prøv med IW i stedet for week i din datepart...
Avatar billede dougheffernan Nybegynder
07. december 2006 - 08:18 #9
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
Avatar billede dougheffernan Nybegynder
07. december 2006 - 09:19 #10
Nå, det var ikke så galt alligevel:
RIGHT(CONVERT(varchar(4), DATEPART(year,[dato])),2) + CONVERT(varchar(2), DATEPART(week, [dato]) - 1)

Er dog stadig betænkelig ved at anvende
DATEPART(week, [dato]) - 1

Tak for hjælpen, teepee. De 2½ time er reduceret til ca. 15 sek! 600 gange hurtigere! :)
Avatar billede teepee Nybegynder
07. december 2006 - 09:22 #11
Velbekommen....
Avatar billede dougheffernan Nybegynder
07. december 2006 - 11:36 #12
Kun ét problem:
hvis datoen f.eks. er 13-01-2006, så er der tale om uge 2 i år 06, hvilket bliver til 062 (skulle have været 0602)

Kan man udbygge ovenstående, så hvis der er tale om et "single-digit" ugenummer, så skrives der 0 foran?
Avatar billede teepee Nybegynder
07. december 2006 - 13:08 #13
Avatar billede dougheffernan Nybegynder
07. december 2006 - 13:34 #14
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! :(
Avatar billede dougheffernan Nybegynder
07. december 2006 - 13:39 #15
Avatar billede teepee Nybegynder
07. december 2006 - 13:42 #16
Ugenumre har altid været besværlige. Fandt det her link, men det skal du jo så ikke bruge ;-)
http://www.sqlservercentral.com/columnists/chedgate/onthetrailoftheisoweek_printversion.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester