2013-02-27 3 views
1

프로 시저 및 제약 조건을 변경하기 위해 새 테이블을 만드는 것에서부터 프로덕션 데이터베이스에 많은 변경을 구현해야합니다. 프로덕션에서의 구현은 제 3의 공급 업체가 수동으로 수행합니다. 모든 스크립트에 대해 파일을 보내야합니다. 구현이 약간의 오류를 만들거나 아무 일도 일어나지 않을까 우려됩니다. 그러나 프로덕션 단계에서 동일한 스크립트를 무대에 배치 했으므로 다른 환경에 배포하기 전에 좋은 사후 검증 스크립트를 만들어야합니다.프로덕션 환경에서 배포를 테스트하는 방법?

그래서 모든 테이블, 뷰 및 프로 시저에 테스트를 위해 주석을 남기고 있지만이 방법을 사용하는 것은 확실하지 않습니다.

테이블에서 삽입/업데이트/삭제를하지 않고 변경 사항이 성공적으로 적용되었는지 또는 절차를 실행하지 않고 테스트를 수행하는 것이 더 나은 방법인지 확인하고 콘솔에서 "라인"을 가져 와서 복사본을 배포하는 사람과 출력 메시지를 붙여 넣으시겠습니까?

뭔가 같은 ... 절차가 생성되지 않았거나 사용자가

답변

3
  1. 내가 "데이터베이스 테스트 주도 개발"에 앤디의 블로그를 읽을 것 "이 ON ERROR"액세스, 인쇄이없는 경우. http://sqlblog.com/blogs/andy_leonard/archive/2012/08/07/revisiting-test-driven-database-development.aspx

2. 이 나는 ​​나무 등의 방식으로 모든 스크립트를 작성합니다. 멱등 원 (idempotent) 연산은 동일한 입력 매개 변수로 두 번 이상 호출 될 경우 추가 효과가없는 연산입니다.

3. 어느 A., 그들은 스크립트 또는 B. 사용 sqlcmd.exe를 실행하고 로깅 기능을 사용하는 경우 타사 공급 업체가 당신에게 SSMS 화면의 "텍스트 출력을"보내 .log 파일을 보내달라고 요청하십시오.

-o

http://msdn.microsoft.com/en-us/library/ms162773.aspx

OUTPUT_FILE는 여기에 "나무 등"인 .SQL 파일입니다. dbo.Employee.LastName 열이 원래 64자인 경우이 스크립트는이를 변경합니다. "NOT EXISTS"로 변경하고 (CHARACTER_MAXIMUM_LENGTH 검사를 제거하여) 이전에 존재하지 않는 열을 작성하십시오 (이는 스크립트의 99 %가 이미 "서비스중인"DB에있는 것처럼 보입니다). 변수에 대한 sqlcmd "자리 표시 자"에 유의하십시오. 하지만 아래의 스크립트를 1 회 또는 333 회 실행할 수 있으며 결과는 동일합니다.

Use [$(DBNAME)] 
GO 

:Error $(ErrorOutputFileFromCommandLine) 

IF EXISTS ( SELECT TABLE_SCHEMA , TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Employee' and TABLE_SCHEMA = 'dbo' ) 
    BEGIN 

     IF EXISTS 
     (
      SELECT * 
       FROM [INFORMATION_SCHEMA].[COLUMNS] 
      WHERE 
       TABLE_NAME = 'Employee' 
       AND TABLE_SCHEMA = 'dbo' 
       AND COLUMN_NAME = 'LastName' 
       AND CHARACTER_MAXIMUM_LENGTH < 128 
     ) 
      BEGIN 
       print 'Altering the column dbo.Employee.*LastName*' 

       ALTER TABLE [dbo].[Employee] 
       ALTER COLUMN [LastName] varchar(128) NOT NULL; 

      END 
     ELSE 
      BEGIN 
       print 'The column dbo.Employee.*LastName* already exists and supports 128 characters.' 
      END 

    END 

GO 
+0

수정 해 주셔서 감사합니다. 우수한! –

+0

차가움. 당신이 더 나은 응답을 얻지 못하면, 이것이 당신을 도왔습니다. "정답으로 표시"는 감사합니다. – granadaCoder

+0

옙, 죄송합니다, 잊어 버려요! –

관련 문제