2013-01-18 2 views
1

코드사용자 정의 테이블 형식 매개 변수

CREATE TYPE [dbo].[IntListType] AS TABLE([Number] [int] NULL) 
DECLARE @ids as IntListType; 
DECLARE @TempIds as IntListType;  

상황

내가 저장 프로 시저에서 필터링 할 필요가 제품의 긴 긴 목록을 가지고있다. 필터는 사용자 정의 테이블 유형으로 제공되며 각 필터는 비어 있거나 가득 차있을 수 있습니다. 이것에 대한 단일 쿼리를 만들려고했지만 필터 중 하나가 비어 있으면 작동하지 않습니다.

그래서 열 : 번호 만 포함하는 다른 사용자 정의 테이블 형식을 만들기로 결정했습니다. 이 IF (select filterName from @customtable) is not null 비어 어떠했는지

그런 다음, 각 필터 유형이 확인하고 만약 그렇다면, 그것은 그 이름과 일치하는 번호 목록에 추가 제품을 ID를 조회합니다.

다음 필터가 emmpty가 아닌 경우 임시 테이블에 ID를 추가하고 첫 번째 테이블과 결합합니다.

지금까지 필터가 null인지 아닌지를 처리하는 가장 효과적인 방법 인 것으로 확인되었습니다. 어떤 식 으로든 그것은 필요한 이드를 얻을 것입니다! 나는 저를 다시 제공하는 저장 프로 시저에 마지막이라는 코드를 구현하는 방법을 찾고 있어요

IF (select count(*) from @ids) > 0 
BEGIN    
    IF(select count(*) from @TempIds) 
    BEGIN 
    delete from @ids 
     where Number not in 
      (select C.Number 
      from @ids C 
      inner join @TempIds T on C.Number = T.Number)  
    END 
END 
ELSE 
BEGIN 
    insert into @ids 
    select * from @TempIds 
END 
delete from @TempIds 

문제

:

이제 모든 필터는 결국 다음 코드를 perfrom합니다 IntListType의리스트 그러나 @ids (declare @ids as IntListType) can't be set. (asin 설정 @ids = @TempIds '> 모든 스칼라 변수를 선언해야합니다 @ids'뿐만 아니라 '@ TempIds')

어떻게 해결할 수 있습니까?

시도

는 이미 모든 모든 테이블을 결합하여 내부 조인과 함께, 외부 조인 및 기타 조인 ..하지만 방법으로 내가 할 때 모든 (또는 모두 같은 결과를 얻을이를 건너 시도했습니다)가 비어 있습니다.

필자가 볼 수있는 한, 모든 필터 유형을 효율적으로 진행하고 null이 아닌지 확인하는 유일한 방법입니다. 결과 등을 처리합니다.

답변

0

공유 한 쿼리 부분에는 @ids 또는 @TempIds에 대한 선언이 없습니다. 해당 부분을 추가 할 수 있습니까?

+0

추가 코드 –

+0

함수가 목록을 반환하는 방법을 알지 못합니다. 그 후에 같은 함수가 목록을 다시 변경할 수 있습니다. –

관련 문제