TSQL 跨链接服务器使用 soundex

TSQL Using soundex across linked servers

(此 post 中的对象名称已更改以保护白痴)。

我正在匹配员工姓名列表,其中一个列表在 Server_A

...另一个列表在 Server_B

在某些情况下,相同的值会返回不同的 SOUNDEX 值。如此有效地说,在确实存在匹配的地方不存在匹配。在这些情况下,通常(但不总是)存在一定程度的名称复杂性。所以 print soundex('Czosgro')(不是真名)returns 'C226' 在一台服务器上,'C260' 在另一台服务器上。啊!所以这个(示例)查询 returns 行我没想到它:

WITH srv2 as 
(
SELECT DISTINCT psn.surname
,soundex(psn.surname) as sx
FROM blah.personnel psn --synonym to linked server table
)
, srv1 as 
(
SELECT DISTINCT wrk.Surname
,soundex(wrk.Surname) as sx
FROM hr.Workers                         wrk
)
SELECT *
FROM srv2
JOIN srv1 ON rap.surname = srv1.Surname --Same name
WHERE srv2.sx <> srv1.sx                --Different soundex
;

我能够通过将 srv2 中的数据选择到本地服务器上的临时文件 table 来解决问题。 运行以下说明问题不再明显:

IF OBJECT_ID('tempdb..#srv2') IS NOT NULL DROP TABLE #srv2;
SELECT DISTINCT psn.surname 
INTO #srv2
FROM blah.personnel psn --synonym to linked server table
;

WITH srv2 as 
(
SELECT DISTINCT psn.surname
,soundex(psn.surname) as sx
FROM #srv2 psn
)
, srv1 as 
(
SELECT DISTINCT wrk.Surname
,soundex(wrk.Surname) as sx
FROM hr.Workers                         wrk
)
SELECT *
FROM srv2
JOIN srv1 ON srv2.surname = srv1.Surname
WHERE srv2.sx <> srv1.sx
; 

我的问题是: 这个问题是否是由决定最佳计划的过程引起的,假设 SOUNDEX() 跨不同版本的 SQL服务器都一致?似乎它只是将查询原封不动地推送回远程服务器,远程服务器应用它的 SOUNDEX() 版本。这似乎不能保证匹配。 补充问题:这个推理可以外推到所有函数吗?

确实 SOUNDEX() 在不同版本的 SQL 服务器上对于一小群 "sounds"(例如 "cz" 声音)的表现确实不同。我上面描述的解决方案似乎可行。用户应注意,在每个实例上使用 SOUNDEX() 函数进行的跨服务器比较可能不会产生一致的结果。