2012-07-25 3 views
1

사례에 대한 계정을 얻으려면 저장 프로 시저를 사용하고 있습니다. @accounts 매개 변수가 NULL 인 경우 해당 사례에 대한 모든 계정을 가져오고 싶습니다. @accountsNOT NULL 인 경우 쉼표로 구분 된 accountid 문자열입니다. 나는 이것을 처리 할 수있는 단일 where 절을 원합니다. @accountsNULL 인 경우 사례에 대한 모든 계정을 가져옵니다. 그렇지 않으면 @accounts 매개 변수를 사용하고 지정된 계정 아이디로 계정을 가져옵니다. 두 개의 서로 다른 WHERE 절로 쿼리를 두 번 필요로하는 큰 문 IF을 피하고 싶습니다.SQL WHERE 절이 동적이어야합니다.

DECLARE @caseId BIGINT, 
    DECLARE @accounts VARCHAR(255) 

    SELECT TOP 1 @userId = userId FROM TblTraceCur t 
    WHERE caseId = @caseid 
    ORDER BY processDate DESC 

    SELECT  
       .... (select logic) ... 
    WHERE  
       t.caseId = @caseID AND 
       t.userId = @userId AND 
       t.shortStock = 0 AND 
       ... (where I need the new logic) ... 
    order by t.tracln ASC 

감사합니다.

+1

쿼리 최적화 프로그램에서 인덱스를 사용할 수 있으므로 임시 테이블과 [Split() function] (http://stackoverflow.com/questions/697519/split-function-equivalent-in-tsql)을 사용하는 것이 더 나을 것입니다. 따라서 속도가 향상됩니다. –

답변

3

이것은 나를 위해 일했습니다. 귀하의 게시물에 표시 한 곳의 (@accounts IS NULL OR @accounts LIKE ('%,' + CAST(t.caseId AS VARCHAR(255)) + ',%'))을 추가하십시오. 물론 @accounts의 첫 번째 문자와 마지막 문자가 작동하려면 쉼표를 사용해야하지만 가장 쉬운 방법이라고 생각해야합니다. 쉼표를 사용하지 않으면 id가 잘못 반환됩니다. 예를 들어, @accounts = 12는 ids 1, 2 및 12를 반환합니다. 쉼표를 사용하여 첫 번째 문자와 마지막 문자를 사용하면이 오류가 발생하지 않습니다.

+0

그게 내 대답이었을거야 –

+0

@ 감사합니다. 내가 내일 일하러 갈 때 나는 그것을 시도 할 것이다. –

+0

저에게 큰 도움이되었습니다. 감사! –

관련 문제