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이 아닌지 확인하는 유일한 방법입니다. 결과 등을 처리합니다.
추가 코드 –
함수가 목록을 반환하는 방법을 알지 못합니다. 그 후에 같은 함수가 목록을 다시 변경할 수 있습니다. –