2010-01-21 8 views
1

나와 나와 저의 동료는 SQL Server 2008 쿼리 길이와 SQL Server Optimizer에 관한 질문을 가지고 있습니다.저장 프로 시저의 where 절의 최대 크기

잠재적으로 많은 매개 변수가있는 저장 프로 시저를 생성하려고합니다. 저장 프로 시저 내부에서 다른 테이블을 결합하는 테이블에서 일부 값을 선택하기 만하면됩니다.

우리의 저장 프로 시저이

CREATE PROCEDURE QueryTable 
@Parameter001 nvarchar(20), 
@Parameter002 int, 
@Parameter003 datetime, 
@Parameter004 decimal(11,2), 
@Parameter005 date, 
@Parameter006 varchar(150), 
@Parameter007 int, 
@Parameter008 decimal(5,2), 
@Parameter009 nvarchar(10), 
@Parameter010 nvarchar(200), 
@Parameter011 nvarchar(50) --, 
--...and so on, there are probably 50 to 100 parameters here 

AS 
BEGIN 
SET NOCOUNT ON; 

SELECT ID, COL01, COL02, COL03, COL04, COL05 from TestTable T 
LEFT JOIN AnotherTable A On T.SomeColomn = A.SomeColumn 
LEFT JOIN AThirdTable ATT On A.ThirdTableID = ATT.Id 
--and so on, probably 5-10 Tables joined here 
WHERE 
     T.Col02 = @Parameter001 AND 
     T.Col05 = @Parameter004 AND 
     ATT.SomeColumnContainingData = @Parameter027 
     A.AnotherID = @Parameter050 
     --probably 50 to 100 conditions here (Number of conditions equals number of parameters) 
END 
GO 

우리의 질문에 다음과 같이 표시됩니다 은 쿼리 최적화와 SQL 서버 캐시 고려할 수있는 곳-조건의 양에 제한이 있습니까? 기술적 인 한계가 없다면 몇 가지 조건을 사용할 수 있고 사용해야하는지에 대한 모범 사례가 있습니까?

답변

0

...

우리는 서버에서 실행되는 동적 SQL을 생성하여이 문제를 해결했다. 이런 식으로 절이 사용되는 곳과 관련이 있으며 진술은 상대적으로 짧습니다.

0

SQL Server Books Online에는 쿼리 측면을 포함하여 구현 제한 목록이 있습니다. This은 SQL Server 2005 목록입니다.

+0

(http://technet.microsoft.com/en-us/library/ms143432.aspx "This")은 SQL Server 2008의 링크입니다. – DrummingCoder

1

WHERE 절 수의 제한이 문제가되지 않습니다.

캐싱 된 매개 변수 스니핑 및 잘못된 (또는 잘못된) 쿼리 계획이있을 수 있습니다.

이 다소 OPTIMIZE FOR

은 물론, 덜 복잡한 당신이 WHERE 절, 더 나은 만들 수 있습니다 사용하여 피할 수 있습니다. 아무도 관심이 경우