8

저장 프로 시저 (SQL 2005/2008)에 많이 의존하는 응용 프로그램이 있습니다. 우리는 이러한 저장 프로 시저 중 25-35 개를 수정하는 사소한 업데이트를 수행하고 있습니다. 응용 프로그램은 두 버전의 저장 프로 시저를 사용할 수 있어야합니다.저장 프로 시저의 버전 변경

이것은 응용 프로그램의 주요 버전 4이며 일반적으로 우리는 완전히 새로운 버전으로 갈 수 있도록 데이터 구조를 수정할 수있었습니다. 그러나이 경우에는 그렇게 할 수 없습니다. 여기

내가 각 저장 프로 시저의 "2"버전을 확인

  1. 을 마련했습니다 내 2 개 옵션입니다. getUser라는 프로 시저가있는 경우 getUser2를 만듭니다. 이 단점은 각 버전 변경시 ​​저장 프로 시저의 수가 기하 급수적으로 증가한다는 것입니다.

  2. 기본적으로 v1 인 각 저장 프로 시저에 @version 매개 변수를 추가하십시오. 이렇게하면 저장 프로 시저 수가 줄어들지 만 저장 프로 시저가 부풀어 오릅니다.

누구든지이 문제에 대해 의견이 있으십니까? 다른 영리한 아이디어?

코디

+0

+1이 질문에 대한 답변은 프로젝트에서 나를 도울 것입니다. – Dusty

답변

1

확실히 두 가지 파일을 만들지는 않겠습니다.

어쩌면 소스 제어에서 모든 버전의 브랜치를 만들고 다음 버전으로 새 브랜치를 만든 다음 두 브랜치를 시스템에 별도의 폴더로 포함하고 비즈니스 로직이 올바른 위치.

이 솔루션은 조금 엉성한 것일 수 있지만 몇 가지 악의 경우가 적습니다.

실제로 저장 프로 시저 코드를 버전 관리하는 것은 필자의 의견으로는 분명해야합니다.

1

제공하신 두 번째 옵션을 권해드립니다. 버전 매개 변수를 사용하십시오. 이것은 웹 서비스가하는 일이기 때문에 오랜 시간 전에 API를 사용하기 시작한 앱의 코드를 깨뜨리지는 않지만 API는 어느 시점에서 업데이트됩니다.

나는 두 가지 버전 사이에서 동일한 논리를 사용하여 proc 또는 그 맨 아래로 추상화 할 수 있다고 생각한다. 또는 잠재적으로 공통 요소에 대한 함수를 작성하고 큰 IF/SWTICH 블록에서 해당 함수를 호출 할 수 있습니다.

5

나는이 기회에 저장 프로 시저에서 ORM 또는 다른 접근 방식으로 이동하려고합니다. 두 가지 제안 솔루션 모두 사용할 저장 프로 시저를 결정하기 위해 일종의 코드 변경이 필요합니다. 대신 저장 프로 시저 또는 ORM 사용 여부를 결정해야합니다. 또한 저장 프로 시저의 대부분을 단계적으로 제거 할 계획을 세웁니다.

나는 많은 나쁜 코드를보고 내 경력에서 시스템을 엉망으로 만들었지 만 프로젝트가 저장 프로 시저 목록에서 GetItemFromLots_2_Temp_2을 보는 것처럼 회수 될 수 있다는 희망은 전혀 없습니다. 여러 저장 프로 시저보다 여러 가지 방법이 훨씬 쉽고 유지 관리가 쉽습니다.

(스토어드 프로 시저를 좋아하는 사람들에게 나는 나쁜 것이라는 말은 아닙니다. 스토어드 프로 시저를 사용하는 이런 종류의 것을 다루는 영리한 접근법이있을 것이라고 확신합니다. 그런 접근법이 사용된다면, 이것은 질문을하지 않았을 것이다.)

2

새 논리가 조건부로 실행되도록 기존 저장 프로 시저를 수정하십시오. 새 논리가 실행될 필요가있을 때만 proc가 호출됩니다 ... 새 proc이 약간 다른 인터페이스를 가질 경우 (set sProc 매개 변수 중 하나를 선택하면 해당 옵션을 사용하고 매개 변수의 존재 또는 부재를 사용하여 프로 시저 내에서 실행될 코드의 청크를 제어 할 수 있습니다.

이전 논리가 더 이상 필요하지 않으면 sProcs에서 제거하십시오

0

다음 두 가지 이유로 두 가지 파일 옵션을 사용할 것입니다 :

  • 서명, 그것은 우리가 광범위하게 저장 프로 시저를 사용하는 데 사용되는 매개 변수의 수는 각 저장 프로 시저가 모든 조건 코드
0

에서 오류 때문에 적은 기회 간단 할 것

  • 버전에 따라 변경할 수있다 내 회사,하지만 (대부분) 늦게 ORM쪽으로 그들로부터 멀리 옮겼습니다.

    우리는 여전히 사용하고 있으며 우리의 버전은 이전과 동일합니다. 남아있는 저장 프로 시저 (몇 사람 만 할 권한이 있음)를 수정할 때마다 SQL을 저장하고 저장합니다 우리의 버전 제어에있는 .sql 파일.

    소스 제어와 코드 파일 사이에 통합이 많이 없기 때문에 (소스 서버와 SQL 서버가 통합되어 있지 않기 때문에) 소스 제어가 아닌 것보다 낫습니다.

    EDIT - 더 이상 실행 가능한 형식으로 존재하지 않으므로 더 이상 저장 프로 시저의 이전 버전을 사용할 필요가없는 경우에만 작동합니다.

  • 0

    또 다른 흥미로운 방법은 저장 프로 시저의 모든 코드를 코드 버전과 함께 데이터베이스 테이블에 저장하는 것입니다. 그런 다음 요청을 처리하는 "프론트 엔드"proc가 있고 버전에 따라 동적으로 proc을 만들어 실행합니다. 완료되면 proc를 삭제할 수 있습니다.

    벽의 제안을 어지럽 쳤지만 나에게 도움이 될 수 있습니다.

    +0

    그게 너무 복잡하게 들리네 ... 더 간단하지 않은게 좋을까요? – Jeff

    +0

    예 ...하지만 포스터는 그가 상자 아이디어를 찾고 있다고 말했습니다 ... 결코 그렇게하지 않을 것입니다. – thomas