2011-01-15 3 views
1

확인 NULL 값을 가지고, 그래서 나는이 문제를 알고있을 때 절 행을 반환하지 WHERE :SQL 필드

SET ANSI_NULLS가 ON 인 경우, null 값에 대한 모든 비교가 UNKNOWN으로 평가

그러나

, DataTable을 쿼리하려고합니다.

내 쿼리에 추가 할 수있는 모든 컬럼에 대한

OR col_1 IS NULL OR col_2 IS NULL 

,하지만 내 테이블은 47 열이, 그리고 동적 SQL (문자열 연결)를 짓고 있어요, 그리고 고통이해야 할 것처럼 그냥 보인다 그. 다른 해결책이 있습니까?

WHERE 비교에서 값이 NULL 인 모든 행을 다시 가져와야했습니다.

UPDATE

나에게 문제가 준 쿼리의 예 :

string query = col_1 not in ('Dorothy', 'Blanche') and col_2 not in ('Zborna', 'Devereaux') 
grid.DataContext = dataTable.Select(query).CopyToDataTable(); 

(검색하지 않은 행을 경우/col_1 = null 및/또는 col_2 = null 경우)

+3

문제의 원인이되는 쿼리 종류의 예를 보여주십시오. –

+1

당신의 열이 모든 문자열이라면 정말 더러운 방법은 당신이 쿼리하는 모든 열을 연결 한 다음 null인지 확인하는 것입니다. – leeny

+0

동일한 테스트를 수행해야하는 경우 동일한 유형의 많은 열, 내 생각 엔 이러한 값을 첫 번째 테이블에 외래 키가있는 별도의 테이블에 넣어야한다는 것입니다. 그러나 테이블 스키마를 게시 할 때까지는 알 수있는 방법이 없습니다. –

답변

5

그래서 당신이 뭔가를 의미 like (2 열의 예)

WHERE (col1 = 'abc' or col1 is null) 
    AND (col2 = 3 or col2 is null) 

하지만 항상 null을 포함 하시겠습니까? 이

WHERE isnull(col1,'abc') = 'abc' 
    AND isnull(col2, 3) = 3 
+0

첫 번째 예제에서는 'WHERE/AND'가 없어도됩니다. 예 : '('Sophia ','Rose '가 아닌 col_1 또는 col_1이 null) 및 ('Petrillo ','Nylund ')에 있지 않은 col_2 또는 col_2가 null 인 경우)' – JohnB

3

작동합니다 당신은 NULL 값을 얻기 원하기 때문에 당신은이 일을하고 있습니까, 또는 당신이 원하는하지 않기 때문에 NULL 값은 비교 방해? 예를 들어

이 :

WHERE col_1 != 'John' 

컬럼 col_1이 (당신이 알고 귀하의 질문에 표시된 것) NULL되는 모든 행을 반환하지 않습니다.

위와 같이 WHERE 절을 사용하여 col_1 IS NULL 행을 반환하려는 경우 MS SQL (하나는 mySql)에 두 가지 옵션이 있습니다.

MS SQL과 mySql에서 coalesce() 함수를 사용하면이 정렬을 비교할 수 있습니다. MS SQL에서 (이것은 mySql과 동일하다고 생각합니다.) 함수는 두 개 이상의 인수를 취하여 순서대로 평가하여 발견 된 첫 번째 비 NULL 값을 반환합니다. MS SQL에는 isNull()이라는 속기 함수가 있는데, 이는 coalesce()과 비슷하지만 두 개의 매개 변수 만 사용합니다.

WHERE coalesce(col_1,'') != 'John' 

과 그 컬럼 col_1뿐만 아니라 컬럼 col_1에 NULL이 아닌 값이 행 '에 동일시하지 않는로 NULL IS가 행을 반환 : 위의 예에서

는 다음을 수행 할 것 남자'.

이것이 실제 목표 인 경우이 기술이 효과적입니다.

+0

+1 : 귀하의 제안은 DBMS를 사용했다면이 상황을 다루지 만,이 질문은 C#에서'DataTable.Select()'에 관한 것입니다. – JohnB

+0

죄송합니다, C#을 모르겠으며 귀하의 게시물에 sql 태그를 기반으로 응답하고 있습니다. 다행스럽게도 C# 전문가가 내가했던 것보다 당신을 도울 수 있기를 바랍니다! –