2014-02-26 2 views
0

m 번 테이블의 모든 레코드를 복제하는 가장 쉬운 방법은 무엇입니까? 범행은 복제가 오래된 주문을 유지해야한다는 것입니다. 내가 가진 모든 경우 즉, 기록SQL에서 레코드를 복제하려면

3 회 중복 후
A, B, & C, 

했다, 나는 A, A, A, B, ..., 등

처럼, 다른

A, B, C, A, B, C, A, B, & C, 

대신 무엇을 얻어야한다

덕분에 원래 순서대로 행을 반환하고 싶다면

+3

질문을 이해할 수 없습니다. A, B 및 C가 테이블의 레코드이면 본질적으로 순서가 지정되지 않습니다. 주문을 지정하는 열이 있습니까? –

+0

@Gordon이 옳습니다. 여전히 지저분한 일을하고 싶다면 커서를 잘못 사용해보십시오. – jean

+0

"주문을 지정하는 열이 있습니까?" 확실합니다. 복제 후에도 대리 키를 추가해야합니다. – xpt

답변

1

, 당신이 할 수있는 것과 :

select t.* 
from table t cross join 
    (select 1 as n union all select 2 union all select 3) n 
order by n.n, t.ordercol; 

order by은 주문을 보증합니다. 주문중인 원래 열에 따라 달라집니다.

한편, union all을 사용하거나 재귀 CTE를 사용하여 데이터를 생성하는 경우는 마찬가지입니다. 이는 합리적인 대안입니다. order by을 사용하지 않으면 주문 세트는 이 아니며 결과 세트에이 보장되지 않습니다. 이것은 당신에게 아이디어를 줄 것이다

+0

안녕하세요, gordon이 'targetTable select col에 삽입하십시오. 원본 테이블에서 정렬'명령을 사용하십시오. 삽입 된 레코드 순서가 –

+0

SQL Server가이를 보증합니다. 식별 열이 정렬 순서로 지정됩니다. 표는 본질적으로 순서가 지정되지 않으므로 실제 게재 신청서가 차이를 만들어서는 안됩니다. –

+0

@ GordonLinoff, 나는 모든 중복 된 레코드에 대해 대리 키 ROW_NUMBER()가 있어야합니다. 그게 가능하니? 오, 나 혼자 야. – xpt

0

희망 : -

DECLARE @Start int = 1 
DECLARE @Stop int = 5 
DECLARE @tbl table 
(
    oldValue varchar(20) 
) 
INSERT INTO @tbl 
    SELECT name FROM TABLE_01 

WHILE @start<[email protected] 
    BEGIN 
    INSERT INTO table_01 
    SELECT oldValue FROM @tableVariable 

    SET @start = @start + 1 
    END 

모든 먼저 records..so 테이블 변수의 모든 레코드를 삽입 중복 말했다입니다. 그런 다음 while 루프를 사용하여 같은 테이블에 n 개의 레코드를 모두 삽입합니다.

관련 문제