[英]Dynamic Script for Column Comparison between two table in sql server
我有两个表,其中有28列。 在生产环境中,SQL Server排序规则设置为区分大小写。
我必须检查像这样的值:
UPPER(Target.SKU) <> UPPER(Source.SKU)
OR UPPER(Target.PRC) <> UPPER(Source.PRC)
OR UPPER(Target.PACKSIZE) <> UPPER(Source.PACKSIZE).
是否可以动态地执行此操作,而无需为每列重复UPPER
语句?
我只是想更整齐地做。 请分享您的想法。
谢谢
我要做两件事:首先,在逐行浏览之前,检查两个表是否具有相同的内容
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM target_table
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM source_table
如果这些数字匹配,则两个表的内容完全相同的可能性非常大。
如果数字不匹配,请逐行检查以查找不同的记录:
;with cte1 AS (
SELECT t.id, BINARY_CHECKSUM(*) AS checker
FROM target_table t
)
;with cte2 AS (
SELECT s.id, BINARY_CHECKSUM(*) AS checker
FROM source_table s
)
SELECT cte1.id, cte2.id
FROM cte1
INNER JOIN cte2
ON cte1.id = cte2.id
AND cte1.checker <> cte2.checker
这应该返回表中两个表都不匹配的特定记录。
如果您的陈述中有其他逻辑,则可以先使用该逻辑进行子选择,然后将字段选择为UPPER,然后进行比较
select fields
FROM (
Select UPPER(SKU), UPPER(PRC), UPPER(PACKETSIZE), otherfields
from table
where logic
)
WHERE Target. SKU <> Source. SKU
OR Target. PRC <> Source. PRC
OR Target. PACKSIZE <> Source. PACKSIZE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.