使用交叉连接更新查询

时间:2013-10-08 17:20:44

标签: tsql sql-server-2005

我有一张表,您可以在公司名称中找到单词词典及其同义词。我想用它来标准化另一个表中的名称。例如,“WIDGET COMPANY INCORPORATED”将标准化为“WIDGET CO INC”。我认为它会像下面的交叉连接一样简单,但它似乎只运行列表中的第一个同义词,而不是整个列表。我是以错误的方式来做这件事的吗?如果我不能解决这个问题,我会尝试在SSIS中尝试这样做,但我认为这应该是一个相对简单的任务过于复杂......当然,我知道这是一个交叉连接,我们谈的是很多行 - 准确地说是5000万......

update [dbo].[Company addresses]
set [Name 1 syn] = replace(a.[Name 1 syn], ' ' + b.[Synonym] + ' ', ' ' + b.[Base] + ' ')
from [dbo].[Company addresses] a
cross join dbo.Synonyms b

1 个答案:

答案 0 :(得分:3)

如下:

DECLARE @RC int = 1;

WHILE @RC > 0
BEGIN
  update [dbo].[Company addresses]
  set [Name 1 syn] = replace(a.[Name 1 syn], ' ' + b.[Synonym] + ' ', ' ' + b.[Base] + ' ')
  from [dbo].[Company addresses] a
  inner join dbo.Synonyms b on a.[Name 1 syn] LIKE '% ' + b.[Synonym] + ' %';

  SET @RC = @@ROWCOUNT;
END