比较NULL

use*_*237 5 sql t-sql sql-server-2008

我正在设计一个动态SQL查询,它将根据目标表检查源表.我想比较源的行与目标的行,以检查差异.

CREATE TABLE TABLE_A (KEY INT, COL1 INT, COL2 INT)
CREATE TABLE TABLE_B (KEY INT, COL1 INT, COL2 INT)
Run Code Online (Sandbox Code Playgroud)

所以我创建了这个声明:

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)
Run Code Online (Sandbox Code Playgroud)

但只有col1和col2的值不为空时,这才有效.如果table-a col1为null且table-b col1为null,那么我认为它们相等.

我知道我可以在我的列周围添加一个ISNULL,但这是一个正在构建的动态查询,所以我只知道列名而不是数据类型.

有什么建议?

Mar*_*ith 9

你可以使用这种方法

SELECT A.* 
FROM TABLE_A A
INNER JOIN TABLE_B B
ON B.KEY = A.KEY
WHERE NOT EXISTS (SELECT A.* 
                  INTERSECT 
                  SELECT B.* )
Run Code Online (Sandbox Code Playgroud)