Eksempel 1:
opdater kalksad1 sæt brred=_brredfrom ( vælg row_number() over (rækkefølge efter brred<2 desc, brred=4 desc, brred>=2 desc, brred ) som _brred, kalk_id som _kalk_id fra kalksad1 hvor brkalk=2 bestilles efter _kalk_id) som _hvor kalk_id=_kalk_id og brred!=_brred;
Eksempel 2:
opdater kalksad1 sæt brred=_brredfrom ( vælg row_number() over (rækkefølge efter brred<4 desc, brred!=1 desc, brred>=4 desc, brred ) som _brred, kalk_id som _kalk_id fra kalksad1 hvor brkalk =2 bestil efter _kalk_id) som _hvor kalk_id=_kalk_id og brred!=_brred;
Hvis du har et unikt indeks på (brkalk,brred)
så ville det være mere kompliceret, da der under omnummerering vil være dobbelt brred
.
Men for mange rækker vil jeg anbefale at bruge noget, som var meget nyttigt i dage med BASIC sprog på 8bit computere - nummer dine rækker med mellemrum.
Så i stedet for:
(26, 2, 1, 'tekstindeks 26 dok 2 række 1'),(30, 2, 2, 'tekstindeks 30 dok. 2 række 2'),(42, 2, 3, ' tekstindeks 42 dok 2 række 3'),(43, 2, 4, 'tekstindeks 43 dok 2 række 4'),(12, 2, 5, 'tekstindeks 12 dok. 2 række 5'),
brug:
(26, 2, 1024, 'tekstindeks 26 dok 2 række 1'),(30, 2, 2048, 'tekstindeks 30 dok. 2 række 2'),(42, 2, 3072, ' tekstindeks 42 dok 2 række 3'),(43, 2, 4096, 'tekstindeks 43 dok 2 række 4'),(12, 2, 5120, 'tekstindeks 12 dok. 2 række 5'),
Så ville dine eksempler bare se sådan ud:
opdater kalksad1 set brred=(2048+1024)/2 hvor kalk_id=43
, hvilket ville ændre det til:(26, 2, 1024, 'tekstindeks 26 dok 2 række 1'),(43, 2, 1536, 'tekstindeks 43 dok. 2 række 4'),(30, 2 , 2048, 'tekstindeks 30 dok 2 række 2'),(42, 2, 3072, 'tekstindeks 42 dok. 2 række 3'),(12, 2, 5120, 'tekstindeks 12 dok. 2 række 5'),
opdater kalksad1 set brred=(4096+3072)/2 hvor kalk_id=43
, hvilket ville ændre det til:(30, 2, 2048, 'tekstindeks 30 dok 2 række 2'),(42, 2, 3072, 'tekstindeks 42 dok. 2 række 3'),(26, 2 , 3584, 'tekstindeks 26 dok 2 række 1'),(43, 2, 4096, 'tekstindeks 43 dok. 2 række 4'),(12, 2, 5120, 'tekstindeks 12 dok. 2 række 5'),
Kun når der ikke er et mellemrum mellem rækkerne, hvor målet skal være, skal du først omnummerere rækkerne ved at bruge f.eks.:
opdater kalksad1 sæt brred=_brred*1024from ( vælg row_number() over (rækkefølge efter brred) som _brred, kalk_id som _kalk_id fra kalksad1 hvor brkalk=2 order by _brred desc) as _where kalk_id=_kalk_id; kode>
Dette ville være meget dårligere end at ændre hver række mellem kilde og mål. Men dette har kun betydning, når der kan være mange rækker at ændre.