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,但这是一个正在构建的动态查询,所以我只知道列名而不是数据类型.
有什么建议?
你可以使用这种方法
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)