를 이용, 주기적으로 각 행을 추가하지만.
SQL Server 2005 이상에서는 이것을 사용할 수 있습니다. 한 번에이 작업을 수행하면 다른 테이블의 모든 외래 키 후크를 그대로 유지하면서 테이블 제약 조건, 기본값 등을 그대로 유지합니다.
create table badlyordered(id int identity, date datetime, otherdata varchar(100))
insert badlyordered(date) select getdate()+4
insert badlyordered(date) select getdate()+2
insert badlyordered(date) select getdate()+3
insert badlyordered(date) select getdate()
insert badlyordered(date) select getdate()+10
insert badlyordered(date) select getdate()-10
update badlyordered set otherdata = date
select * from badlyordered order by id
id date otherdata
----------- ----------------------- ---------------------
7 2011-02-21 18:51:55.087 Feb 21 2011 6:51PM
8 2011-02-19 18:51:55.087 Feb 19 2011 6:51PM
9 2011-02-20 18:51:55.087 Feb 20 2011 6:51PM
10 2011-02-17 18:51:55.087 Feb 17 2011 6:51PM
11 2011-02-27 18:51:55.087 Feb 27 2011 6:51PM
12 2011-02-07 18:51:55.087 Feb 7 2011 6:51PM
;with tmp as (
select *,
table_seq = row_number() over (order by id),
nice_seq = row_number() over (order by date, id)
from badlyordered
)
update t1
set date = t2.date
,otherdata = t2.otherdata
-- and any other columns in the table
from tmp t1
inner join tmp t2 on t1.table_seq=t2.nice_seq
select * from badlyordered order by id
id date otherdata
----------- ----------------------- ---------------------
7 2011-02-07 18:51:55.087 Feb 7 2011 6:51PM
8 2011-02-17 18:51:55.087 Feb 17 2011 6:51PM
9 2011-02-19 18:51:55.087 Feb 19 2011 6:51PM
10 2011-02-20 18:51:55.087 Feb 20 2011 6:51PM
11 2011-02-21 18:51:55.087 Feb 21 2011 6:51PM
12 2011-02-27 18:51:55.087 Feb 27 2011 6:51PM
그러나 저는 MySQL을 사용하고 있다는 것을 알고 있습니다. 변수를 사용하여 MySQL에서 행 번호 매기기를 두 번 수행 한 다음 행 번호를 사용하여 업데이트를 수행 할 수도 있습니다.
이렇게하면 SQL Server에서 CTE와 동일한 데이터가 생성됩니다.
select ..(rownumber variable by date).. from
(
select ..(rownumber variable by id).. from tbl order by id
) n
당신은 필요 2 (!) 그
select n.id, o.id
from
(
select ..(rownumber variable by date).. from
(
select ..(rownumber variable by id).. from tbl order by id
) n
inner join
select ..(rownumber variable by date).. from
(
select ..(rownumber variable by id).. from tbl order by id
) n
on ....
) o
의 대상으로 원본 업데이트 ID의지도를 생성한다. 마지막으로 업데이트를 수행하기 위해 테이블을이 ID 세트에 조인하려면 UPDATE FROM JOIN
MySQL 기술을 사용해야합니다.
이진 색인을 열 날짜에 사용하는 경우 ID 또는 날짜순으로 주문할 수 있습니다. 단, 다시 주문하지 않아도됩니다. – SergeS
일반적으로 SQL 데이터베이스 시스템에서는 "주문"하지 않고 다시 주문하지 않습니다. - 테이블을 물리적으로. 주문이 필요하다면'SELECT' 쿼리에'ORDER BY'를 지정하십시오 - 그게 전부입니다. –
그래, 내 SELECT 쿼리에서 간단히 'ORDER BY 날짜'를 알 수 있지만 조직 된 DB를 가지고 있고 'ORDER BY id'를 할 수있다. 내 첫 게시물에서 그렇게 말한 것이다.) – Dizzi