[SQL] WHERE, SQL Server의 CASE
SQLWHERE, SQL Server의 CASE
나는 사용자가 일부 조항 드롭 다운 메뉴에서 선택하는 몇 가지 검색을하고 있어요. 그들이 어떤 상자가 비어 떠날 때, 나는 쿼리 절을 무시해야합니다. 나는 CASE를 알고, 내가 생각 최고의 내가 저장 프로 시저의 매개 변수에 0을 전달하면, 그것은 다음과 같이 해당 매개 변수를 무시한다는 것입니다.
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE (something else) END)
그래서, (뭔가 다른) 어떤 조건이 같아야합니다, 그것은 국가 ID는 1> 모두에서,하지만 난 사용하는 방법을 모른다>과 = 같은 경우에서와 같이 '> 0'이 될 수 있습니다.
어떤 제안?
해결법
-
==============================
1.몇 가지 방법 :
몇 가지 방법 :
-- Do the comparison, OR'd with a check on the @Country=0 case WHERE (a.Country = @Country OR @Country = 0) -- compare the Country field to itself WHERE a.Country = CASE WHEN @Country > 0 THEN @Country ELSE a.Country END
또는 동적으로 생성 된 문을 사용하고 적절한 경우에만 국가 조건에 추가 할 수 있습니다. 이것은 당신이 실제로 적용해야하고 지원하는 지수가 제자리에있는 경우 더 나은 실행 계획을 초래할 수있는 조건 쿼리를 실행한다는 의미에서 가장 효율적인해야한다. 당신은 SQL 주입에 방지하기 위해 매개 변수화 SQL을 사용해야합니다.
-
==============================
2.당신은 할 수 단순화 할 수 있습니다 :
당신은 할 수 단순화 할 수 있습니다 :
WHERE a.Country = COALESCE(NULLIF(@Country,0), a.Country);
-
==============================
3.(뭔가 다른) a.Country해야한다
(뭔가 다른) a.Country해야한다
국가 널 (NULL) 인 경우 다음 수 a.Country 또는 a.Country은 NULL입니다 (다른 것) 만들기
-
==============================
4.
.. ELSE a.Country ...
나는 가정
-
==============================
5.이 시도:
이 시도:
WHERE a.Country = (CASE WHEN @Country > 0 THEN @Country ELSE a.Country END)
from https://stackoverflow.com/questions/10191424/case-in-where-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 ExecuteNonQuery는 ()를 사용할 때 발생하는 오류 메시지를받을 수 있나요? (0) | 2020.07.07 |
---|---|
[SQL] 평균 및 그룹 별과 SQL 쿼리 (0) | 2020.07.07 |
[SQL] T-SQL의 UPDATE의 모든 행에 대해 RAND 차이가 (0) | 2020.07.07 |
[SQL] "ORA-01438 :이 항목 허용 지정된 정밀도보다 큰 값"3을 삽입 할 때 (0) | 2020.07.07 |
[SQL] MySQL의 제한 범위 (0) | 2020.07.07 |