0

그래서 MS Access 응용 프로그램을 SQL Server 백엔드에 다시 쓰는 중입니다. 액세스가 MAX()을 사용하는 방식과 SQL Server가 수행하는 방식에서 일부 비정상적인 동작으로 고민하고 있습니다. 어쩌면 잠을 자지 못했지만 몇 시간 동안이 문제를 꼼짝 않고 바라 보면서 SQL 서버 결과가 다른 이유를 알 수 없습니다.Max() 동작이 MS Access와 SQL 서버간에 다릅니다

샘플 데이터 :

Acct  ByUser TranType TranID  AddID ClearTime    TranTime 
12345678 CZ12   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 
12345678 CZ24   W 55545124 CZ36 12/12/2011 10:01:26 AM 12/12/2011 10:01:26 AM 
12345678 CZ36   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 
12345678 MG12   W 55545124 CZ36 12/12/2011 10:48:43 AM 12/12/2011 10:48:43 AM 
12345678 CZ25   W 55545124 CZ36 12/12/2011 9:45:31 AM 12/12/2011 9:45:31 AM 

MS 액세스 쿼리 : Access에서

SELECT Acct, TypeID, TranType 
    , Max(TranTime) AS MaxOfTranTime 
    , AddID 
    , Max(ClearTime) AS MaxOfClearTime 
FROM Cleared 
WHERE 
(
    ((ByUser) Like "CZ*" Or (ByUser) Like "TR*" Or 
    (ByUser) Like "RR*" Or (ByUser) Like "MG*" Or 
    (ByUser) Like "RN*" Or (ByUser) Like "PS*" Or 
    (ByUser) Like "OP*" Or (ByUser) Like "JA*" Or 
    (ByUser) Like "IC*" Or (ByUser) Like "IB*" Or 
    (ByUser) Like "FO*" Or (ByUser) Like "DV*" Or 
    (ByUser) Like "CD*" Or (ByUser) Like "BO*" Or 
    (ByUser) Like "2D*") 
) 
GROUP BY Acct, TypeID, TranType, AddID 

결과 :

Account  TranID TranType MaxOfTranTime    AddID MaxOfClearTime 
12345678 55545124 W  12/12/2011 10:48:43 AM  CZ36 12/12/2011 9:45:31 AM 

는 SQL 서버의 쿼리 내 ByUsers이 저장되어있는 것을 약간 다릅니다 테이블에서 많은 수의 검색어에 대한 타이핑을 최소화 할 수 있습니다.

SELECT C.Acct 
    , C.RequestId 
    , C.TypeCode 
    , Max(C.TranTime) as MaxTranTime 
    , C.AddUserId 
    , Max(C.ClearDate) As MaxClearDate 
FROM Cleared C 
WHERE EXISTS (SELECT * 
       FROM UserIdFilter U 
       WHERE ByUserId LIKE U.UserId) 
GROUP BY Acct, RequestId, TypeCode, AddUserId 

SQL 서버의 결과는 :이 통과되면

Account  TranID TranType MaxOfTranTime   AddID MaxOfClearTime 
12345678 55545124 W  12/12/2011 10:48:43 AM CZ36 12/12/2011 10:48:43 AM 

그것은 나에게 보인다 SQL 서버 12/12/2011 오전 10시 48분 43초의 MaxOfClearTime을 받고 올바른지 그러나 나는 무엇인가 놓치고 있냐? 액세스 프로세스가 MAX()입니까? 나는 이것으로 나의 마음을 잃어 버리고있는 것처럼 느껴진다. 그래서 이것에 대한 다른 시각은 위대 할 것이다.

+0

첫 번째에서는 'Max (ClearTime) AS MaxOfClearTime'을 사용하고 두 번째에서는 'Max (C.ClearDate) As MaxReasClearDate'를 사용하는 것으로 보입니다. – ysrb

+0

@ysrb 그들은 동일합니다. , 사이트에 게시하기 전에 데이터를 제거해야합니다. 나는 그것을 바로 잡았다 – Taryn

+0

"SELECT * FROM UserIdFilter U WHERE ByUserId LIKE U.UserId"는 첫 번째 쿼리에서와 동일한 값을 제공합니까 ?? –

답변

1

Access에서 제공 한 데이터를 입력하고 쿼리를 실행하면 예상 한 결과 인 10 > 9이 제공됩니다.

물론 ClearTime과 TranTime이 모두 DateTime으로 저장되어 있다고 가정했는데, 텍스트로 변경하고 샘플과 일치하도록 서식을 변경하면 동일한 결과 (예 : "9" > "10")가 발생합니다.

MS Access에서 테이블의 스키마를 확인할 수 있습니까?

+0

이것은 올바른 방향으로 나를 가리켰다. 그것은 액세스의 텍스트 필드였으며 날짜 필드가 아니 었습니다. – Taryn