2009-06-02 8 views
2

2000 줄 가까이에서 실행되는 다소 긴 SQL 스크립트를 작성하고 있습니다. 긴 스크립트를 이해하는 것은 정말 어려워지기 때문에 논리적 인 단위로 분해하고 다른 SQL 파일에서 분리하고 싶습니다.SQL 스크립트 깨기

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 각 논리 단위가 저장 프로 시저 여야합니까? 어쩌면 UDF?

답변

2

저장 프로 시저 및 기능을 활용하십시오. 순수한 SQL을 수행한다면 코드의 논리 단위를위한 더 좋은 곳은 없습니다. 또한 코드 유지/편집이 훨씬 쉬워졌습니다.

당신의 스크립트가 오래 있다면, 당신이하고있는 일을 살펴보고 다른 스크립팅 언어 또는 심지어 C#/LINQ에 대해 생각해 보는 것이 좋습니다. 때로는 모든 것을 SQL로 유지하는 것이 의미가 있으며 때로는 SQL로 무언가를 강제하는 경우도 있지만 그 결정 만 할 수 있습니다.

또한 C# 또는 다른 스크립팅 언어는 소스 제어와 쉽게 통합됩니다. 생각할 것들!

0

첫째, 2000 줄의 SQL은 파일에 너무 많은 양이 없습니다 (DDL은 보통 큰 데이터베이스에 대해이 정도 또는 그 이상을 실행합니다). 그러나, 그것은 너무 많이 하나의 proc을 가지고 있습니다! 이를 해결하는 방법은 논리적 구성 요소를 분리 된 절차로 분리하는 것입니다. 극복해야 할 병목이나 SQL에서 쉽게 수행 할 수없는 작업이 없으면 UDF가 필요하지 않습니다.

마지막 조언 하나 : Views를 통한 데이터 액세스 단순화에 대해 생각해보십시오.

왜 이렇게 큰 proc로 무엇을하려고합니까? 저는 T-SQL을 사용하여 엄청난 양의 작업을 수행하고 있으며, 2000 줄 가까이에 코드를 작성하지 않았습니다! 당신이 UDF를 사용하는 경우

+0

저장 프로 시저를 통해 많은 테이블을 채우는 deploymnet 스크립트를 작성하고 있습니다. 배포 스크립트가 다른 SP 집합을 호출 중입니다. –

0

당신은 당신이 무엇을하고 있는지에 따라 달라질 수 있습니다 그것을 파괴하는 데 사용하는 무엇.

이것은 모든 프로그래밍 언어와 비슷하지만 광고/스크립트/함수가 너무 커져서 분열 될 필요가 없습니다.

동일하거나 유사한 쿼리로 인해 스크립트가 큰 경우 이러한 쿼리를보기로 추가하여 스크립트를 줄일 수 있습니다.

저장된 프로 시저 및 사용자 정의 함수는 코드가 수행하는 작업에 따라 다른 좋은 방법입니다.

0

일괄 처리를위한 많은 코드처럼 보입니다.

각 논리 단계/프로세스 (즉, 주문/발송 주문/고객 등록 생성)를 별도의 저장 프로 시저로 분리하십시오. 프로세스 흐름도를 작성하고이를 사용하여 T-SQL 코드 배치를 해독하는 데 도움이 될 수 있습니다. 당신이 T-SQL은 다음과 같은 CLR 기능 등 여러 SPS에 최대

0

휴식을로 관리 코드에 이러한 작업을 이동하여 계산 로직을 수행하려고 시도하는 경우

, - 시도 catch 블록 및 오류 처리 (기억을 추가 , 0으로 나누는 것은 잡을 수있는 오류가 아닙니다.), 각각을 순서대로 실행하도록 작업을 설정하십시오.