2010-07-07 6 views
1

이전 버전에서 최신 버전의 데이터베이스 및 관련 스키마로 클라이언트 데이터베이스를 업데이트하는 프로젝트에서 작업하고 있습니다.SQL Server 스키마 변경 자동화 스크립트

우리 프로그램에서 사용하는 데이터베이스의 모든 테이블에 대해 다음을 수행하는 방법을 찾고 있습니다.

 
If the table doesn't exist 
    create table 
else 
    for each column in the table 
    bring the column up to date or create it 

관리 스튜디오에서이 작업을 수행하는 방법을 찾지 못했지만 Google을 통해 설정하지 않았습니다.

나에게 SQL Management Studio 또는이 스크립트를 생성하는 프로그램에서이 옵션을 제공하는 것이 좋을 것입니다.

감사합니다.

+0

클라이언트 데이터베이스는 모두 동일한 구조입니까? –

+0

그렇습니다. – msarchet

+0

그런 경우 Redgate 제품 (SQLCompare, SQL DataCompare 또는 SQL Packager)은 필요한 것을 수행해야합니다. 그들이하지 않는 것을 설명하지 않으면 우리는 더 잘 조언 할 수 있습니다. –

답변

1

INFORMATION_SCHEMA보기를 사용하여이 시나리오에 대한 코드를 생성하는 절차를 작성할 수 있습니다. 무료 :)!

DECLARE @Table_of_Tables TABLE 
(
    Id int, 
    Table_name varchar(50) 
) 
DECLARE @tablename varchar(50) 
DECLARE @iterator int 
DECLARE @count int 
DECLARE SQL nvarchar(max) 

SET @SQL = '' 

INSERT INTO @Table_of_Tables 
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 

SELECT @count = COUNT(1) FROM @Table_of_Tables 
SET @iterator = 1 

WHILE(@iterator <= @Count) 
BEGIN 
    SET @SQL = @SQL + ' IF EXISTS(SELECT 1 FROM sys.sysobjects where type = ''u'' and name = ''+ @Table_of_Tables +'''  SET @SQL = @SQL + ' BEGIN ' 
    SET @SQL = @SQL + <CreateTableScriptHere> 
    SET @SQL = @SQL + ' END ' 
    SET @SQL = @SQL + ' ELSE ' 
    SET @SQL = @SQL + ' BEGIN ' 
    -- Similar Loop to generate code for all the columns in this table 
    -- SELECT COLUMN_NAME FROM INFROMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tablename 
    SET @SQL = @SQL + ' END ' 

    SET @iterator = @iterator + 1 
END 
+0

나는 당신이 이렇게 할 수 있다고 생각했다. – msarchet

+0

이 스크립트는 필자가 필요로하는 것 중에 가장 가까운 사람이지만 codesmith를 사용하여 스크립트를 생성하게되었습니다. – msarchet

0

당신

Redgate's SQL Compare (멋진 도구)에 대한 두 가지 옵션

MS Visual Studio for Database Developers이 있습니다.

+0

예, SQL Compare는 내가 보았지만 필요한 작업을 수행 할 수 없습니다. VS 옵션에 대해 자세히 설명해 주시겠습니까 – msarchet

+0

정확히 무엇을하지 않습니까? 당신은 데이터 및/또는 스키마 비교를 할 수 있습니다 ... 비주얼 스튜디오 옵션은 비주얼 스튜디오 2010 프리미엄 또는 궁극적으로 내장되어 있습니다. 또한 스키마와 데이터를 비교합니다. – NotMe

0

http://www.red-gate.com/products/SQL_Compare/

이 할 수있는 자동으로 비교하고 데이터베이스 스키마를 동기화하거나 당신은 항상 제안이 블로그에 볼 수있는 자체 제작 옵션의 또 다른

0

의 스키마와 일치하는 하나의 데이터베이스를 업데이트하는 스크립트를 만들 : http://www.tewari.info/dbupdater/

기본적으로 기본 데이터베이스를 만들고 설정 한 후에는 스크립트 된 변경 내용을 디렉터리에 추가하고이 응용 프로그램을 실행할 수 있습니다. 응용 프로그램은 이미 존재하는 모든 변경 사항을 무시하고 데이터베이스 객체를 최신의 가장 훌륭한 객체로 가져옵니다. 스키마 구조가 업데이트 된 후에 데이터를 작성하거나 다른 작업을 수행해야하는 경우 '사후 처리'기능을 포함 할 수도 있습니다.

단점은 설명서가 있지만 사물에 대한 제어력이 매우 우수하다는 것입니다.

관련 문제