[SQL] 어떻게 새 행의 고유 ID에서 SQL 테이블하지만 스왑에 기록을 복사합니까?
SQL어떻게 새 행의 고유 ID에서 SQL 테이블하지만 스왑에 기록을 복사합니까?
이 질문에 가까이 내가 필요로 무엇을 제공하지만, 내 시나리오는 약간 다릅니다. 소스 및 대상 테이블 테이블은 동일한 일차 키는 고유 식별자 (GUID)이다. 언제이 시도 :
insert into MyTable
select * from MyTable where uniqueId = @Id;
나는 차 키를 통해 복사하려고 해요 이후 분명, 기본 키 제약 조건 위반을 얻는다. 사실, 난 전혀 기본 키를 통해 복사하지 않습니다. 오히려, 나는 새로운 일을 만들려고합니다. 또한, 나는 선택적 이상의 특정 필드를 복사, 그리고 다른 사람의 널 (null)을 떠날 것이다. 문제를 더 복잡하게하기 위해, 나는 원래 레코드의 기본 키를 가지고 가고, 복사 (PreviousId 필드)에서 다른 필드에 삽입해야합니다.
나는 확실히이에 쉽게 해결책이 있어요, 난 그냥 그것이 무엇인지 충분한 TSQL을 모른다.
해결법
-
==============================
1.이 시도: MyTable에 삽입 (필드 1, 2 필드, id_backup) 필드 1 선택 FIELD2으로 MYTABLE에서 UNIQUEID 여기서 UNIQUEID = @Id;
이 시도: MyTable에 삽입 (필드 1, 2 필드, id_backup) 필드 1 선택 FIELD2으로 MYTABLE에서 UNIQUEID 여기서 UNIQUEID = @Id;
-
==============================
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.난 당신이 모든 열 이름을 쓰고 피하기 위해 노력하고 추측하고있어. 당신은 SQL Management Studio를 사용하는 경우 당신은 쉽게 바로 그때 당신은 당신의 쿼리를 생성하는 출력을 허비 할 수 있습니다 .. 테이블 및 스크립트로 삽입 클릭 할 수 있습니다.
난 당신이 모든 열 이름을 쓰고 피하기 위해 노력하고 추측하고있어. 당신은 SQL Management Studio를 사용하는 경우 당신은 쉽게 바로 그때 당신은 당신의 쿼리를 생성하는 출력을 허비 할 수 있습니다 .. 테이블 및 스크립트로 삽입 클릭 할 수 있습니다.
-
==============================
4.모든 필드하지만 ID 필드를 지정합니다.
모든 필드하지만 ID 필드를 지정합니다.
INSERT INTO MyTable (FIELD2, FIELD3, ..., FIELD529, PreviousId) SELECT FIELD2, NULL, ..., FIELD529, FIELD1 FROM MyTable WHERE FIELD1 = @Id;
-
==============================
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.내 대답은 파티에 늦게 알고 있습니다. 하지만 난이 해결 방법은 모든 해답보다는 약간 다르다.
내 대답은 파티에 늦게 알고 있습니다. 하지만 난이 해결 방법은 모든 해답보다는 약간 다르다.
난 내가 몇 열을 제외하고 테이블의 행을 복제 할 필요가있는 상황이 있었다. 그 몇 가지 새로운 값을 가질 것이다. 이 과정은 테이블에 미래의 변화를 자동으로 지원해야한다. 이것은 어떤 열 이름을 지정하지 않고 기록을 복제, 의미한다.
내 방법은이다
선언 @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.
insert into MyTable (uniqueId, column1, column2, referencedUniqueId) select NewGuid(), // don't know this syntax, sorry column1, column2, uniqueId, from MyTable where uniqueId = @Id
-
==============================
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.내 표는 100 개 필드가, 난 그냥 작업에 쿼리를 필요로했다. 지금은 몇 가지 기본적인 조건 논리와 필드의 번호를 전환하고 서수 위치에 대해 걱정하지 않아도됩니다.
내 표는 100 개 필드가, 난 그냥 작업에 쿼리를 필요로했다. 지금은 몇 가지 기본적인 조건 논리와 필드의 번호를 전환하고 서수 위치에 대해 걱정하지 않아도됩니다.
-
==============================
10.당신은 다음과 같이 할 수 있습니다 :
당신은 다음과 같이 할 수 있습니다 :
INSERT INTO DENI/FRIEN01P SELECT RCRDID+112, PROFESION, NAME, SURNAME, AGE, RCRDTYP, RCRDLCU, RCRDLCT, RCRDLCD FROM FRIEN01P
대신 (112)의 당신은 테이블 DENI / FRIEN01P의 최대 아이디의 숫자를이 놓아야합니다.
-
==============================
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")
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
'SQL' 카테고리의 다른 글
[SQL] 어떻게 PHP와 MySQL과 간단한 사이트 검색을 구현하는 것이? (0) | 2020.05.18 |
---|---|
[SQL] 어떻게 SQL에서 테이블의 마지막 레코드를 선택하려면? (0) | 2020.05.18 |
[SQL] 개체 'DF __ *'는 '*'컬럼에 따라 달라집니다 - 더블로 INT 변경 (0) | 2020.05.18 |
[SQL] LINQ to SQL은이 점을 놓치지 않는다? (등 음속) ORM - 매퍼 하위 최적의 솔루션이 아닌가요? (0) | 2020.05.18 |
[SQL] 어떻게 정렬에 데이터베이스의 모든 테이블을 변환하는? (0) | 2020.05.18 |