2009-11-20 3 views
0

일련의 TSQL 변경 스크립트가 적절하게 순서대로 나열되어 있습니다.여러 TSQL 변경 스크립트를 건너 뛰는 결합

나는 이것을 하나의 커다란 스크립트로 결합하고 싶다. 각 스크립트에 대해 업데이트하는 스크립트에 버전 번호 함수를 포함하여 변경 1을 실행하면 1을 반환하고, 2를 실행하면 2를 반환합니다. 이 함수는 데이터베이스에 남아 있으며 항상 스키마/데이터베이스의 버전을 반환합니다.

이미 실행 된 스크립트가 다시 실행되는 것을 방지하는 몇 줄의 줄을 사용하여 각 변경 스크립트를 래핑하려면 마찬가지로 "너무 낮음"스키마 버전에서 변경 스크립트가 실행되지 않도록해야합니다. 이렇게하면 모든 변경 스크립트를 하나로 묶을 수 있으며 모든 실행시 누락 된 changescripts 만 적용됩니다.

모두 괜찮 았지만 osql/Query Analyzer/Sql Server Studio가 실행 된 부분을 건너 뛸 수있는 방법을 찾을 수 없습니다.

  • GOTO 때문에 GO의 마찬가지로 작동하지 않습니다 END를 시작하면
  • (스크립트는 "GO"를 포함) 배치에서 작동하지 않습니다

업데이트 :이 반복하려면 내가 돈 ' 현재 버전 번호를 기억하는 데 도움이 필요하므로 이미 적용된 업데이트가 다시 적용되는 것을 방지하기 위해 스크립트의 일부를 건너 뛰는 방법이 필요합니다.

  • 내가 db_executeSql 문 또는 EXECUTE의 배치를 포장 할 수 있지만이 문제를 범위 지정에 이르게 :

    나는 방법의 숫자를 시도했습니다.

  • IF dbo.DB_VERSION()!=REQUIRED_VERSION THEN BEGIN .... END 구조로 각 배치를 래핑 할 수는 있지만 엉망이며 처리 오류가 발생합니다.

변경 사항을 적용해서는 안되는 상황이 예상되며 예외적 인 경우는 아닙니다. 따라서 RETURN을 입력하면 해당 사항이 확인되지 않습니다.

다른 제안 사항이 있으십니까?

답변

1

테이블의 경우 버전 번호를 유지하고이 함수를 사용하여 테이블의 값을 확인하고 IF 문에서 변경하려는 버전과 비교할 수 있습니다.

+0

안녕하십니까. 제 문제는 버전 번호를 확인하지 않고 있습니다. 사용자 정의 함수는 테이블의 오버 헤드없이이 함수를 처리합니다. 변경 사항이 이미 적용되었다고 판단되면 TSQL 스크립트의 섹션을 건너 뛰는 방법이 필요합니다. GOTO와 IF BEGIN END 구문이 하나의 배치에만 적용되기 때문에 특히 배치간에 건너 뛸 수있는 방법 (GO 문으로 구분됨). – kaa

관련 문제