오라클에서는 어떤 테이블을 참조해서 새로운 테이블을 생성할때요../
create table New_TB
as select * from OLD_TB;
이렇게 만드는데요..
ms-sql 에는 이런것들이 없나요?
그냥 create script 돌려서 테이블 생성해두고 insert 해서 데이터를 넣는 방법 밖에 없나요?
오라클에서 위의 예제 처럼 처리하면 PK이나 index들이 생성되는 지 모르겠네요.
MS-SQL에서는 원하시는 작업은 아래의 쿼리 같이 처리 합니다.
select * into New_TB from OLD_TB;
그런데 아쉬운 점은 PK이나 FK등의 제약 조건은 별도로 생성해 주어야 한다는 것과 계산된 열이 하나의 일반 열로 처리된다는 점입니다. 그래서 만약 동일한 구조의 테이블을 여러개 생성해야 한다면 아래의 쿼리를 응용해 보세요. 저도 월별 로그 테이블 생성하는데 사용하는데, 사용할 만 합니다.
SET LOCK_TIMEOUT 10000; SET DEADLOCK_PRIORITY LOW;
DECLARE @tableName VARCHAR(30) ,@query NVARCHAR(1000)
SELECT @tableName = 'TNAME' + CONVERT(VARCHAR(6),GETDATE(),112)
-- 로그 테이블이 없으면 생성함 -- TEST 내용이 다 안 보이면, QA 도구의 옵션의 결과의 열당 최대 문자열 수를 조절 바람. SELECT @query=N' IF NOT EXISTS( ' + CHAR(13) + ' SELECT * ' + CHAR(13) + ' FROM sysobjects ' + CHAR(13) + ' WHERE name =''' + @tableName + ''' ' + CHAR(13) + ' ) ' + CHAR(13) + ' BEGIN ' + CHAR(13) + ' CREATE TABLE dbo.' + @tableName + ' ' + CHAR(13) + ' ( ' + CHAR(13) + ' NO int PRIMARY KEY , ' + CHAR(13) + ' CUST_ID varchar (20) NULL , ' + CHAR(13) + ' ) ' + CHAR(13) + ' END ' + CHAR(13)
EXEC @ret_val=sp_executesql @query
/* 위에서 존재여부를 확인 한 테이블 이용한 처리 코드 부분
*/