繁体   English   中英

SQL Server中两个表之间的列比较动态脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM