복붙노트

[SQL] 어떻게 새 행의 고유 ID에서 SQL 테이블하지만 스왑에 기록을 복사합니까?

SQL

어떻게 새 행의 고유 ID에서 SQL 테이블하지만 스왑에 기록을 복사합니까?

이 질문에 가까이 내가 필요로 무엇을 제공하지만, 내 시나리오는 약간 다릅니다. 소스 및 대상 테이블 테이블은 동일한 일차 키는 고유 식별자 (GUID)이다. 언제이 시도 :

insert into MyTable
    select * from MyTable where uniqueId = @Id;

나는 차 키를 통해 복사하려고 해요 이후 분명, 기본 키 제약 조건 위반을 얻는다. 사실, 난 전혀 기본 키를 통해 복사하지 않습니다. 오히려, 나는 새로운 일을 만들려고합니다. 또한, 나는 선택적 이상의 특정 필드를 복사, 그리고 다른 사람의 널 (null)을 떠날 것이다. 문제를 더 복잡하게하기 위해, 나는 원래 레코드의 기본 키를 가지고 가고, 복사 (PreviousId 필드)에서 다른 필드에 삽입해야합니다.

나는 확실히이에 쉽게 해결책이 있어요, 난 그냥 그것이 무엇인지 충분한 TSQL을 모른다.

해결법

  1. ==============================

    1.이 시도: MyTable에 삽입 (필드 1, 2 필드, id_backup)     필드 1 선택 FIELD2으로 MYTABLE에서 UNIQUEID 여기서 UNIQUEID = @Id;

    이 시도: MyTable에 삽입 (필드 1, 2 필드, id_backup)     필드 1 선택 FIELD2으로 MYTABLE에서 UNIQUEID 여기서 UNIQUEID = @Id;

  2. ==============================

    2.좋아, 나는 오래된 문제가 있다고 알고 있지만 내 대답 어쨌든을 게시 할 수 있습니다.

    좋아, 나는 오래된 문제가 있다고 알고 있지만 내 대답 어쨌든을 게시 할 수 있습니다.

    나는이 솔루션을 좋아한다. 난 단지 식별 컬럼 (들)을 지정해야합니다.

    SELECT * INTO TempTable FROM MyTable_T WHERE id = 1;
    ALTER TABLE TempTable DROP COLUMN id;
    INSERT INTO MyTable_T SELECT * FROM TempTable;
    DROP TABLE TempTable;
    

    은 "ID"A 행은 ID 열 그리고 내가 지정할 수있는 유일한 열입니다. 그것은 주위 어쨌든 다른 방법보다 더 나은입니다. :-)

    나는 SQL 서버를 사용합니다. 당신은 사용 행 1과 2에서와 "UPDATE 표" "표 만들기"할 수 있습니다. 흠, 난 정말 그가 원하는 것을 대답을하지 않았다 보았다. 그는 또한 다른 열 ID를 복사하고 싶었다. 그러나이 솔루션은 새로운 자동 ID로 복사본을 만들기위한 좋은 것입니다.

    마이클 Dibbets에서 아이디어를 내 솔루션을 편집 할 수 있습니다.

    use MyDatabase; 
    SELECT * INTO #TempTable FROM [MyTable] WHERE [IndexField] = :id;
    ALTER TABLE #TempTable DROP COLUMN [IndexField]; 
    INSERT INTO [MyTable] SELECT * FROM #TempTable; 
    DROP TABLE #TempTable;
    

    당신은 ","는 구분하여 하나 이상의 열을 삭제할 수 있습니다. : ID가 복사 할 행의 ID로 교체해야합니다. 하여 MyDatabase,을 MyTable 및 IndexField은 당신의 이름 (물론)로 교체해야합니다.

  3. ==============================

    3.난 당신이 모든 열 이름을 쓰고 피하기 위해 노력하고 추측하고있어. 당신은 SQL Management Studio를 사용하는 경우 당신은 쉽게 바로 그때 당신은 당신의 쿼리를 생성하는 출력을 허비 할 수 있습니다 .. 테이블 및 스크립트로 삽입 클릭 할 수 있습니다.

    난 당신이 모든 열 이름을 쓰고 피하기 위해 노력하고 추측하고있어. 당신은 SQL Management Studio를 사용하는 경우 당신은 쉽게 바로 그때 당신은 당신의 쿼리를 생성하는 출력을 허비 할 수 있습니다 .. 테이블 및 스크립트로 삽입 클릭 할 수 있습니다.

  4. ==============================

    4.모든 필드하지만 ID 필드를 지정합니다.

    모든 필드하지만 ID 필드를 지정합니다.

    INSERT INTO MyTable (FIELD2, FIELD3, ..., FIELD529, PreviousId)
    SELECT FIELD2, NULL, ..., FIELD529, FIELD1
    FROM MyTable
    WHERE FIELD1 = @Id;
    
  5. ==============================

    5.나는 다른 개발자에 의해 주기적으로 추가 된 열이있는 테이블로 작업에 하나의 스크립트를 원하는 같은 문제가 있습니다. ,하지만 고객이 모든 최신되지 않을 수 있으므로 현재 버전과 나는 우리의 데이터베이스의 여러 버전을 지원하고 있습니다뿐만 아니라.

    나는 다른 개발자에 의해 주기적으로 추가 된 열이있는 테이블로 작업에 하나의 스크립트를 원하는 같은 문제가 있습니다. ,하지만 고객이 모든 최신되지 않을 수 있으므로 현재 버전과 나는 우리의 데이터베이스의 여러 버전을 지원하고 있습니다뿐만 아니라.

    나는 조나스하여 솔루션을 가져다가 약간 수정했습니다. 이 날은 행의 복사본을 만든 다음 원래의 소스 테이블로 다시 추가하기 전에 기본 키를 변경할 수 있습니다. 이것은 또한 열에서 NULL 값을 허용하지 않는 테이블 작업을위한 정말 편리합니다 그리고 당신은 INSERT에서 각 열 이름을 지정하고 싶지 않습니다.

    이 코드를 복사 'ABC'를 'XYZ'의 행

    SELECT * INTO #TempRow FROM SourceTable WHERE KeyColumn = 'ABC';
    UPDATE #TempRow SET KeyColumn = 'XYZ';
    INSERT INTO SourceTable SELECT * FROM #TempRow;
    DELETE #TempRow;
    

    당신이 완료되면 임시 테이블을 삭제.

    DROP TABLE #TempRow;
    
  6. ==============================

    6.내 대답은 파티에 늦게 알고 있습니다. 하지만 난이 해결 방법은 모든 해답보다는 약간 다르다.

    내 대답은 파티에 늦게 알고 있습니다. 하지만 난이 해결 방법은 모든 해답보다는 약간 다르다.

    난 내가 몇 열을 제외하고 테이블의 행을 복제 할 필요가있는 상황이 있었다. 그 몇 가지 새로운 값을 가질 것이다. 이 과정은 테이블에 미래의 변화를 자동으로 지원해야한다. 이것은 어떤 열 이름을 지정하지 않고 기록을 복제, 의미한다.

    내 방법은이다

    선언 @columnsToCopyValues의 VARCHAR (최대), @query VARCHAR (최대) SET @columnsToCopyValues ​​= ''

    신원 열 및 기타 열 execpt 모든 열을 --get하는 것은 제외한다. 말 IndentityColumn, 열 1, 열 2 선택 @columnsToCopyValues ​​= @columnsToCopyValues ​​+ [이름] + ','C에서 sys.columns 여기서 c.object_id = OBJECT_ID ( 'YourTableName') 및 이름 NOT IN ( 'IndentityColumn', '열 1', '열 2') () @columnsToCopyValues, 0, LEN (@columnsToCopyValues) @columnsToCopyValues ​​= SUBSTRING을 선택 인쇄 @columnsToCopyValues

    @query = CONCAT (columnsToCopyValues ​​@, 'YourTableName (에 삽입' ',' ','값 1 '', ''값 2 '를', '@columnsToCopyValues'를 열 1, 열 2가) 선택 'YourTableName에서 어디 IndentityColumn = 선택 '' ', @searchVariable,' '' ')

    @query 인쇄 간부 (@query)

  7. ==============================

    7.

    insert into MyTable (uniqueId, column1, column2, referencedUniqueId)
    select NewGuid(), // don't know this syntax, sorry
      column1,
      column2,
      uniqueId,
    from MyTable where uniqueId = @Id
    
  8. ==============================

    8."키는"당신의 PK 필드이며 autonumeric 있다면.

    "키는"당신의 PK 필드이며 autonumeric 있다면.

    insert into MyTable (field1, field2, field3, parentkey)
    select field1, field2, null, key from MyTable where uniqueId = @Id
    

    원래 레코드에서 필드 1과 FIELD2 복사, 새 레코드를 생성합니다

  9. ==============================

    9.내 표는 100 개 필드가, 난 그냥 작업에 쿼리를 필요로했다. 지금은 몇 가지 기본적인 조건 논리와 필드의 번호를 전환하고 서수 위치에 대해 걱정하지 않아도됩니다.

    내 표는 100 개 필드가, 난 그냥 작업에 쿼리를 필요로했다. 지금은 몇 가지 기본적인 조건 논리와 필드의 번호를 전환하고 서수 위치에 대해 걱정하지 않아도됩니다.

  10. ==============================

    10.당신은 다음과 같이 할 수 있습니다 :

    당신은 다음과 같이 할 수 있습니다 :

    INSERT INTO DENI/FRIEN01P 
    SELECT 
       RCRDID+112,
       PROFESION,
       NAME,
       SURNAME,
       AGE, 
       RCRDTYP, 
       RCRDLCU, 
       RCRDLCT, 
       RCRDLCD 
    FROM 
       FRIEN01P      
    

    대신 (112)의 당신은 테이블 DENI / FRIEN01P의 최대 아이디의 숫자를이 놓아야합니다.

  11. ==============================

    11.여기에 내가 ASP 고전 사용을했고, 꽤 위의 답변을 작업에 가져올 수 없습니다 나는 새로운 PRODUCT_ID 우리의 시스템에서 제품을 복사 할 수 있기를 원하고 경우에도 작동 할 수 있도록 그것을 필요로 어떻게 우리 테이블에 더 많은 열을 추가.

    여기에 내가 ASP 고전 사용을했고, 꽤 위의 답변을 작업에 가져올 수 없습니다 나는 새로운 PRODUCT_ID 우리의 시스템에서 제품을 복사 할 수 있기를 원하고 경우에도 작동 할 수 있도록 그것을 필요로 어떻게 우리 테이블에 더 많은 열을 추가.

    Cn.Execute("CREATE TEMPORARY TABLE temprow AS SELECT * FROM product WHERE product_id = '12345'")
    Cn.Execute("UPDATE temprow SET product_id = '34567'")
    Cn.Execute("INSERT INTO product SELECT * FROM temprow")
    Cn.Execute("DELETE temprow")
    Cn.Execute("DROP TABLE temprow")
    
  12. from https://stackoverflow.com/questions/149784/how-do-you-copy-a-record-in-a-sql-table-but-swap-out-the-unique-id-of-the-new-ro by cc-by-sa and MIT license