2011-01-14 4 views
0

테이블 값이있는 UDF의 매개 변수에 "어설 션"을 만드는 방법이 있습니까?테이블 값이있는 UDF의 매개 변수를 지정하십시오.

성능상의 이유로 테이블 반환 UDF를 사용하고 싶지만 모든 매개 변수 조합 (시작 및 종료 날짜가 한 달 이상 차이가 있음)을 사용하면 모든 사용자에 대해 서버에서 성능 문제가 발생할 수 있음을 알고 있습니다. .

최종 사용자는 UDF를 사용하여 Excel을 통해 데이터베이스에 쿼리합니다. 특히 UDF (및 테이블 반환 UDF)는 Excel 용 데이터가 너무 큰 경우 유용합니다. 사용자는 데이터를 그룹으로 분류하여 단순한 SQL 조회를 작성하여 행 수를 줄입니다. 예를 들어, 사용자는 매시간 집계보다는 매주 집계에 관심을 가질 수 있습니다. 사용자는 SELECT 문에 의해 그룹을 작성하여 24x7 = 168 번으로 행을 줄입니다. 필자는 다중 문단 UDF에 RAISERROR 문을 작성할 수 있지만 테이블 반환 UDF는 쿼리 최적화 프로그램에 통합되어 있으므로 이러한 쿼리가 테이블 반환 UDF보다 효율적입니다.

따라서 테이블 값이있는 UDF에 전달 된 매개 변수에 대한 어설 션을 정의 할 수 있습니까?

답변

1

짧은 대답은 없습니다 - 단일 명령문 TVF는 하나의 명령문만을 포함 할 수 있습니다.

시도 할 수있는 몇 가지 대안이 있습니다. 가 더 있다고 생각하지하는 사용자를 발생할 수 있습니다, 첫째 - 이것은 몇 가지 이유에 적합하지 않을 수 있습니다

... 
WHERE ... 
AND DATEDIFF(day, @startDate, @endDate) < 31 

처럼 - 하나는 WHERE 절을 확장하여 SQL 문에서 매개 변수의 유효성 검사를 수행하는 것 결과가 반환되지 않은 이유를 전달할 수단이 없으므로 데이터가 기준을 충족합니다. 둘째, 매개 변수를 평가하기 전에 DB 엔진이 쿼리의 데이터 부분을 실행하지 않을 것이라는 보장은 없습니다. 셋째, 나쁜 계획이 캐싱 될 수 있습니다.

SQL 2008을 사용하는 경우 대체 방법은 초 단위의 예상 실행 시간이 주어진 임계 값보다 작은 실행 쿼리로 사용자 또는 사용자 그룹을 제한하는 방법을 제공하는 SQL server resource govenor을 조사하는 것입니다 .

또 다른 방법은 사용자가 쿼리에 사용하는 Excel 시트에 매개 변수 유효성 검사를 추가하는 것이지만 설정 내용에 따라 실용적이지 않을 수도 있습니다.

관련 문제