Null이 아닐 경우 입력 매개 변수를 확인하고 SQL Server의 위치에서 사용
입력 매개 변수를 포함하는 가장 좋은 방법은 무엇입니까?WHERE절이지만 null인 경우 제외하시겠습니까?
제가 믿는 방법은 여러 가지가 있지만, 그때는 기억이 나지 않는 것 같습니다.
또한 제가 사용할 수 있을까요?COALESCE()하지만 이것은 단지 값을 선택하기 위한 것이라고 생각합니다.
편집
명확하게 하기 위해, 다음과 같은 변수를 가정해 보겠습니다.@code ="1"그럼 내가 있는 곳은Where type='B' AND code = @code하지만 만약에@code is null그럼 난 그냥Where type='B'행방불명자를 보다code = @code.
IsNull을 사용할 수 있습니다.
where some_column = IsNull(@yourvariable, 'valueifnull')
편집:
의견에 설명한 내용은 다음과 같습니다.
where (@code is null or code = @code)
여기 다른 접근법이 있습니다.
SELECT * FROM Thingies WHERE ( @thingId IS NULL OR ThingID = @thingId )
어때.
WHERE (Column1 = @Var1 OR @Var1 IS NULL)
AND (Column2 = @Var2 OR @Var2 IS NULL)
다른 사이트에서 찾은 솔루션을 제안하고자 합니다.
SELECT * FROM Thingies
WHERE ThingID = isnull(@ThingId,ThingID)
사용자가 선택하는 경우 이 솔루션을 사용합니다.null그러면 쿼리가 결과로 모든 행을 반환합니다.
이 질문은 우리 중 몇몇이 잠시 머리를 긁적이게 했던 비슷한 문제를 해결하는 데 도움이 되었습니다.저는 다른 누군가가 같은 접근법을 시도하고 왜 그것이 작동하지 않는지 이해할 수 없는 경우에만 그것을 작성합니다.
저는 @Parameter가 null이 아닌 경우 다중 부분 WHERE 절의 일부만 평가하려고 했습니다.아래와 같이 하려고 했지만 @Parameter가 null이면 항상 행이 반환되지 않았습니다.
DECLARE @Parameter int = null;
SELECT * FROM TABLE
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter)
라고 잘못 생각했습니다.(@Parameter is not null AND [AlternateID] = @Parameter)전체 WHERE 절 @Parameter will null의 일부를 구성하지 않습니다.그러나 전체 WHERE 조항을 거짓으로 반환했습니다.해결책은 아래와 같이 OR 1=1을 추가하는 것이었습니다.
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter OR 1=1)
물론 Ali(투표에 충분한 명성이 없음)가 설명한 접근 방식은 이를 더 효율적으로 해결합니다.
WHERE [AlternateID] is not null
AND [Partner_Customer_ID] = ISNULL(@Parameter, [Partner_Customer_ID])
ISNULL()을 사용하거나 다른 사용자가 언급한 것처럼 명시적으로 Null을 확인할 수 있습니다.선택적 입력 파라미터가 1개 또는 2개 이하이면 됩니다.그러나 매개 변수가 더 많으면 해당 열에 작성한 인덱스가 예상대로 사용되지 않기 때문에 이 방법은 매우 비효율적입니다.이러한 경우 동적 SQL을 사용하는 것이 좋습니다.여기 http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ 의 이유를 설명하는 훌륭한 기사가 있습니다.
이것이 도움이 될 것 같습니다.
@id
@name
SELECT [Id],[Name] FROM [Person]
WHERE Id = @id and ISNULL(@name, Name)
이렇게 하면 이름 조건이 null인 경우 무시할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4224991/checking-an-input-param-if-not-null-and-using-it-in-where-in-sql-server
'source' 카테고리의 다른 글
| 데코레이터실행순서 (0) | 2023.07.16 |
|---|---|
| oAuth2 리소스 서버 애플리케이션 내에서 @WithMock 사용자(@SpringBootTest 포함) 사용 (0) | 2023.07.16 |
| R의 숫자에 대한 쉼표 구분 기호? (0) | 2023.07.16 |
| x-Application-Context 헤더란 무엇입니까? (0) | 2023.07.16 |
| data.frame 열을 요인에서 문자로 변환 (0) | 2023.07.16 |