2013-12-09 4 views
0

내 질문에 특히 우리가 복제 또는 더 구체적으로 LIKE 연산자 또는 SELECT 절의 도움으로 테이블의 복사본을 만드는 데 사용하는 접근법에 대해 이전 테이블에서 모든 제약 조건을 복사입니까? 이 위의 문이 oldTable에서 정확한 작업 클론을 만들거나 그냥 newTable에 대한 oldTable에서 구조를 만드는 것입니다 경우LIKE 또는 SELECT 절 및 CONSTRAINTS 동작을 사용하여 테이블 만들기?

CREATE TABLE newTable LIKE oldTable; 

또는

CREATE TABLE newTable AS (SELECT * FROM oldTable) WITH NO DATA; 

설명하십시오.

복제본을 말하면 모든 제약 조건이 적용되는 oldTable의 새로운 작업 복사본을 만들어야한다고 생각합니다. 예를 들어 아래와 같이 정의 된 내 TIMESTAMP 열에 대한 것입니다.

LAST_UPDATE_TS TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP; 

내 newTable의 LAST_UPDATE_TS는 (는) 이전 테이블에서 작동 했습니까?

우리가 각 열에 대해 가질 수있는 제약 조건과 유형은 여러 가지가 있습니다. 따라서 위에서 설명한 것처럼 테이블을 생성 한 후 또는 나중에 수동으로 적용하면 좋은 옵션으로 남아 있지 않습니다. 설명 해주십시오. 감사합니다 :)

답변

0

내가 아는 한, 이것에 대해?

SELECT TMP.* INTO DESTINATION_TABLE 
FROM 
(SELECT * FROM SOURCE_TABLE WHERE 1=0) AS TMP 

이 & 기존 테이블 구조에서 새로운 빈 테이블 구조를 만들어 사용할 수 있습니다.

이제 제약에 대해, 우리는 다음과 같은 단계를 거치게됩니다

,

1]

create table pk (id int primary key); 

enter image description here

2]

sp_help pk 

enter image description here

enter image description here

4

sp_help fk 

enter image description here

+0

감사 디트

select * into fk from (select * from pk) as tmp 
5,

3

. 그것은 완벽하고 확실히 작동 할 것입니다. 내 질문은 실제로이 시점 이후에 시작됩니다. 우리가이 테이블을 만들었습니다. 이 테이블은 모든 제약 조건에서 잘 작동합니까? 옛날 식탁에서 일하는 동안? 또는 우리 자신의 제약 조건을 한 번 추가해야합니까? – Superman

+0

업데이트 된 답변을 선택하십시오. – Aditya

+0

안녕 슈퍼맨, 그냥 테이블의 생성을 테스트하고 결과를 확인하는 방법에 대해. 그렇다면 작동 여부를 확실히 알 수 있습니다. BTW, 기존 데이터베이스에서 ddl을 만들 수있는 도구가 있습니다. ddl을 사용하여 새 테이블을 만들 수 있습니다. –