제품 유형 (prod_type)을 매개 변수로 최대 네 번 전달하는 저장 프로 시저가 있습니다. 잠재적으로 각 매개 변수는 널 (NULL) 일 수 있으며,이 경우 무시해야합니다. 요청 된 모든 제품 유형을 수집하기 위해 각 제품 유형 사이에 OR 연산자가 있어야합니다.TSQL 선택 사항 동일한 필드에서 작동하는 매개 변수
가능하면 sp_ExecuteSQL을 통과 한 동적 SQL 사용을 피하고 싶습니다.
내가 뭘하려고 오전의 단순화, 고립 버전 논의 다음과 같습니다 : 나는 실행 싶은 것이
CREATE TABLE #Products (Prod_ID int, prod_type int);
INSERT INTO #Products
SELECT 1, 2
UNION ALL
SELECT 2, 3
UNION ALL
SELECT 3, 3
UNION ALL
SELECT 4, 1
UNION ALL
SELECT 4, 5
DECLARE @prod_type1 as int;
DECLARE @prod_type2 as int;
DECLARE @prod_type3 as int;
DECLARE @prod_type4 as int;
SET @prod_type1 = NULL;
SET @prod_type2 = 2;
SET @prod_type3 = NULL;
SET @prod_type4 = 3;
Select * from #Products
WHERE ((prod_type = ISNULL(@prod_type1,prod_type))
OR (prod_type = ISNULL(@prod_type2,prod_type))
OR (prod_type = ISNULL(@prod_type3,prod_type)
OR (prod_type = ISNULL(@prod_type4,prod_type))))
는 같은 : 위 분명히
Select * from [Product].[Product]
WHERE (prod_type = 2 OR prod_type = 3)
ISNULL 메서드는 각 행의 제품 유형을 자체적으로 비교하여 긍정적 인 '히트'를 발생 시키므로 ISNULL을 사용하는 해결 방법이 작동하지 않습니다. COALESCE도 같은 문제가 발생합니다.
누구나 sp_ExecuteSQL을 사용하지 않는 솔루션을 제안 할 수 있습니까?
같은 생각이었습니다. 최선의 접근 방식 +1. – Rahul