我有两个表,其中有28列。在生产环境中,SQL Server排序规则设置为区分大小写。
我必须检查如下的值:
UPPER(Target.SKU) <> UPPER(Source.SKU)
OR UPPER(Target.PRC) <> UPPER(Source.PRC)
OR UPPER(Target.PACKSIZE) <> UPPER(Source.PACKSIZE).
是否可以动态执行此操作,而无需重复UPPER
语句
每列?
我只是想把它做得更整齐。请分享您的想法。
由于
答案 0 :(得分:1)
我会做两件事: 首先,在逐行检查之前,检查两个表是否具有相同的内容
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
这应该返回表中特定的记录,这些记录在两个表中都不匹配。
答案 1 :(得分:0)
如果你的陈述中有其他逻辑,你可以先用该逻辑做一个子选择,然后选择字段为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