2012-07-12 2 views
1

새 데이터베이스에 테이블 (수십 개)을 만들고 이전 데이터베이스의 특정 정보를 복사하려면 하루에 여러 번 실행되는 스크립트가 필요합니다.이 정보를 'prev'데이터베이스라고 부릅니다. .sqlserver 테이블의 복사본 구조체 인덱스가

각 테이블의 구조를 '이전'데이터베이스에서 새 데이터베이스로 복사하려고합니다. 그렇게하기 쉽습니다 (Google 덕분에). 또한 새 테이블에서 동일한 정보를 색인화 할 수 있기를 원합니다. 색인은 때로는 열에 있고 때로는 열의 조합입니다. 나는이 인덱스를 수작업으로 쉽게 충분히 만들 수있다. 그러나 SQL을 스크립팅하는 SQL 스크립팅 방법이 있는지 궁금합니다. "어서,이 테이블에있는 인덱스를보고이 새 테이블에 같은 테이블을 넣으십시오."

-- rename underlying files of old db. 
ALTER DATABASE abc SET OFFLINE 
alter database abc 
modify file (name=abc, 
filename = 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xyz.mdf') 
GO 
ALTER DATABASE abc 
modify file (name=abc_log, 
filename = 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xyz_log.ldf') 
GO 

ALTER DATABASE abc SET ONLINE 

-- give new logical name to the prev database 
-- not sure this will work, but I think it will 
USE master 
GO 
ALTER DATABASE abc MODIFY NAME = xyz 
GO 

-- make a new database 
CREATE DATABASE abc 
GO 

-- note that prev db is xyz, new one is abc but has no tables yet 
USE abc 
GO 

-- for each table, copy the structure into table of new db with same name 
SELECT TOP 0 INTO dbo.atab FROM xyz.dbo.atab 
GO 
    -- for each index in THIS table 
    CREATE INDEX idx_field1 ON db.atab (field1) 
    GO 
    CREATE INDEX idx_combined ON db.atab (field2, field3) 
    GO 
    -- etc. 

어쨌든, 나는 이와 같이 생각합니다. 그 마지막 부분을 할 수있는 더 좋은 방법이 있습니까?

답변

0

당신은 Google이 제공 한 훌륭한 통찰력을 언급하지 않습니다.

그러나 SQL Server를 사용하고 있으므로 스크립팅에 대해 알아야합니다. SQL Server Management Studio에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업 -> 스크립트 생성 ...을 선택할 수 있습니다. 데이터베이스의 일부 또는 모든 개체 (테이블의 인덱스 및 제약 조건 포함)에 대한 스크립트를 생성하는 마법사로 이동합니다.

관련 문제