Сравнение NULL - PullRequest
       1

Сравнение NULL

5 голосов
/ 10 января 2012

Я разрабатываю динамический SQL-запрос, который будет проверять исходную таблицу по целевой таблице. Я хотел бы сравнить строки источника со строками цели, чтобы проверить различия.

CREATE TABLE TABLE_A (KEY INT, COL1 INT, COL2 INT)
CREATE TABLE TABLE_B (KEY INT, COL1 INT, COL2 INT)

Итак, я создал это утверждение:

SELECT A.* FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
AND (B.COL1<>A.COL1 OR B.COL2<>A.COL2)

Но это работает только до тех пор, пока значения col1 и col2 не равны нулю. Если table-a col1 равно нулю, а table-b col1 равно нулю, я бы посчитал их равными.

Я знаю, что могу поставить ISNULL вокруг моих столбцов, но это динамический запрос, поэтому я знаю только имя столбца, а не тип данных.

Есть предложения?

Ответы [ 3 ]

9 голосов
/ 10 января 2012

Вы можете использовать этот подход

SELECT A.* 
FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
WHERE NOT EXISTS (SELECT A.* 
                  INTERSECT 
                  SELECT B.* )
2 голосов
/ 10 января 2012

Как насчет IS NULL?

Редактировать: Обновлен запрос, чтобы учесть, что столбцы бот-ч: нулевые ... становятся длинными и безобразными, но работают ...

SELECT A.* FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
AND ((B.COL1<>A.COL1 OR (A.COL1 IS NULL AND B.col1 IS NOT NULL) OR (B.COL1 IS NULL AND A.col1 IS NOT NULL ))
OR (B.COL2<>A.COL2 OR (A.COL2 IS NULL AND B.col2 IS NOT NULL) OR (B.COL2 IS NULL AND A.col2 IS NOT NULL )))
0 голосов
/ 10 января 2012

Если TABLE_A и TABLE_B имеют одинаковые столбцы.Вы можете попробовать это

SELECT  * FROM TABLE_A
EXCEPT 
SELECT  * FROM TABLE_B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...