Как я могу сравнить две таблицы, если у меня есть несоответствия типов в Access 2003? - PullRequest
0 голосов
/ 30 ноября 2011

Я сравниваю две таблицы так:

SELECT *
FROM tableA AS A INNER JOIN tableB AS B ON B.ID = A.ID
WHERE A.col1 <> B.col1 OR A.col2 <> B.col2 OR ...

Этот запрос не работает, потому что у меня где-то есть несоответствие типов (и Access не сообщает мне, какие столбцы не совпадают).

Есть ли эффективный способ найти столбцы, которые не соответствуют? Есть ли способ игнорировать несоответствие и сравнивать в любом случае?

редактирование: Я пытался привести все к строкам, используя Cstr (вдохновленный ответом Така), но Access говорит, что у меня там есть Invalid use of Null. Значит ли это, что Cstr возвращает Null? Если так, я попробовал nz(Cstr(...), 0), и это тоже не помогло.

редактирование: Перемещение вызова на nz внутри вызова на Cstr избавило от этого Invalid use of Null и решило проблему: Cstr(nz(..., 0))

1 Ответ

1 голос
/ 30 ноября 2011

Я не уверен, что Access поддерживает операции CAST (), но в предложении WHERE вы можете попробовать:

WHERE CAST(A.col1 AS VARCHAR(100)) <> CAST(b.col1 AS VARCHAR(100)) 

Если varchar не поддерживается, используйте тип, который поддерживает Access.

Для первого прохода оберните все сравнения столбцов с помощью операции CAST ().Как только это сработает, удаляйте операции CAST () одну за другой из ваших сравнений столбцов, пока не найдете спаренное соединение, которое не работает.

Надеюсь, кто-то с лучшими знаниями Access сможет предоставить вам более быстрое решение.

...