2017-12-26 28 views
-1

ms-access-2010에서 sql 쿼리에 IIF(expression , truePart , falsePart)을 사용했습니다. 나는 또 다른 연산자를 찾았습니다. NZ(expression,falsePart).IIF와 Nz 연산자가 Access SQL에 있음

나는 시간과 공간의 복잡성에있어 더 빠른 연산자를 알고 싶습니다. 어떻게해야합니까?

예 10k 레코드가있는 테이블에서 레코드를 가져 오려는 경우. 위의 연산자에서 사용하는 것이 더 낫습니다.

+3

그들은 다른 목적을 위해 사용되므로 실제 데이터를 기반으로 직접 테스트를 실행하십시오. 또한 Nz는 Access VBA에만 있습니다. – Gustav

답변

1

각각의 실행은 예외적으로 큰 반복을 제외하고는 거의 동일합니다.

쿼리에는 두 가지 문제점이 있습니다. 나를 위해, 반환 된 데이터 형식 및 함수의 원래 상태.

Immediate If는 데이터 형식을 보존합니다. 뿐만 아니라 데이터 유형을 강제 변환하는 데 사용할 수 있습니다. Integer back 또는 Date를 원할 경우 반환 매개 변수로 전달할 수 있습니다. Nz는 돌려 줄 변형 (Text/String)을 제공합니다.

내가 언급 한 다른 문제는 가용성입니다. Immediate If는 Jet의 표현 서비스에 의해 구현됩니다. 전체 Access VBA 라이브러리를로드 할 필요가 없습니다. 즉

- 당신은 코드 (액세스 연결을 필요로하지 않음)에 액세스하려면 외부 라이브러리에서

SELECT * FROM TableName WHERE IIF(FieldName Is Null, 0, FieldName) = 0 

다음 해당 쿼리를 실행할 수와 같은 쿼리를 작성하는 경우.

Jet가 기능을 평가합니다. (이것은 특별히 좋은 쿼리는 아니며 두 함수 중 하나를 사용하면 실제로 끔찍한 쿼리입니다.)

등가

SELECT * FROM TableName WHERE Nz(FieldName, 0) = 0 

Nz를가 액세스 응용 프로그램 개체 모델의 일원이라는 사실에 의존한다. 쿼리를 실행하는 Access라는 것이 절대적으로 필요합니다. 반드시 공통적 인 문제는 아니지만 고려 사항입니다.