2015-02-05 2 views
0

여러 가지 이유로 SQL Server에서 동적 SQL을 사용해야 할 필요가 있지만 결과 코드가 복잡하고 유지 보수가 불가능 해 보입니다. SQL 서버 관리 스튜디오의 인텔리전스가 리터럴 내부의 쿼리에서 작동하지 않으며 전체적으로이 문자열 조작 도구로 인해 IMO가 엉망입니다.동적 SQL을 생성하는 TSQL을 작성하는 작업 단순화

이 작업을 단순화하고 SQL을 유지 관리하기위한 접근 방법은 무엇입니까?

편집 (물론 직접 전혀 SQL을 사용하지하고 내 현재 상황에서 옵션이 아닌 ORM에 의존 제외) : 여러 가지 필터링 매개 변수 내가 SP를 내 현재 특별한 경우 매개 변수가 null이거나 비어있을 때 where 절에 포함되어서는 안되며 (@param IS NULL) OR (column LIKE @param)으로 동적 SQL을 피하려고하면 성능이 저하됩니다.

+0

동적 SQL을 정리 SSMS에 붙여 넣기? 또는 동적 저장된 tsql (저장된 procs)? 아니면 둘다? – DMason

+0

(Re : _ "SQL Server에서 동적 SQL을 사용해야하는 것은 피할 수없는 것처럼 보입니다."_ 그런 식으로 보일 수도 있지만 실제로는 확실한가?) 실제로 동적 SQL이 유일한 해결책입니다 당신은하고 있습니다. 그렇다면, 순서가 맞지 않을 수도있는 여러 문자열 리터럴에 대해 분할되고 분산 된 문장에 적합한 IntelliSense를 얻을 수있는 방법이 없습니다. – stakx

+1

"포괄적 인"쿼리를 처리하는 것 같습니다. IMO 다이나믹 tsql **은 **가는 길입니다. - 더 나은 성능으로 이어질 것입니다. 선택적 params 대 동적 tsql에 대한 여러 술어의 장단점을 설명하는 [좋은 기사가 있습니다.] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/) – DMason

답변

1

정말 대답의 대부분 그러나 이것은 내가 효율성을 위해
굿 그것을
I 사용자의 StringBuilder을하고 줄을 얻는 방법입니다하지 않습니다.
복사 앱 내에서 구문을

sbSQLtotal.AppendLine("select #tempCoreAll.[sID], #tempCoreAll.[sParID] "); 
sbSQLtotal.AppendLine(" from #tempCoreAll "); 
sbSQLtotal.AppendLine(" order by #tempCoreAll.[iden]; "); 
Debug.WriteLine(sbSQLtotal.ToString());