Sql server 在标准化中使用全文搜索

Sql server 在标准化中使用全文搜索,sql-server,tsql,Sql Server,Tsql,我正在标准化街道地址,我认为全文搜索也许可以解决我的问题。 我的问题是,我有200万个错误,使用“喜欢”不能正确工作。 这就是我现在拥有的: UPDATE addresses SET standarAddress = REPLACE (addresses.streetAddress, errors.streetAddress, corrects.streetAddress) FROM corrects INNER JOIN errors ON corrects.id = errors.idC

我正在标准化街道地址,我认为全文搜索也许可以解决我的问题。 我的问题是,我有200万个错误,使用“喜欢”不能正确工作。 这就是我现在拥有的:

UPDATE addresses
SET standarAddress = REPLACE (addresses.streetAddress, errors.streetAddress, corrects.streetAddress)
FROM corrects 
INNER JOIN errors 
ON corrects.id = errors.idCorrects
WHERE (addresses.streetAddress LIKE errors.streetAddress + ' ' + '[0-9]%')
但是,我想用这个来代替LIKE(最后一行):

WHERE CONTAINS(addresses.streetAddress, '@MyErrorVariable')
下面是我的表格的一个真实示例:

--- addresses I want to standarize
CREATE TABLE addresses 
    (id INT PRIMARY KEY NOT NULL,
     direccion VARCHAR(250))
GO
--- addresses with errors like Acrwod Driv instead of Acrewood Drive
INSERT INTO addresses VALUES (1,'Acrwod Driv 45249')
INSERT INTO addresses VALUES (2,'Advntur Lne 45242')
INSERT INTO addresses VALUES (3,'Aborcrek Lan 45242')
GO
--- corrects street addresses
CREATE TABLE corrects
   (id INT PRIMARY KEY NOT NULL,
    streetAddress VARCHAR(250) NULL)
GO
INSERT INTO corrects VALUES (1,'Acrewood Drive')
INSERT INTO corrects VALUES (2,'Adventure Lane')
INSERT INTO corrects VALUES (3,'Arborcreek Lane')

GO
--- errors form corrects street addresses
CREATE TABLE errors
   (id INT PRIMARY KEY NOT NULL,
    streetAddress VARCHAR(250) NULL,
    idCorrects INT FOREIGN KEY REFERENCES corrects(id) NOT NULL)
GO
INSERT INTO errors VALUES (1,'Acrwod Driv',1)
INSERT INTO errors VALUES (2,'Advntur Lne',2)
INSERT INTO errors VALUES (3,'Aborcrek Lan',3)
我对constants的问题是,在这个WHERE CONTAINS(addresses.streetAddress,@MyErrorVariable')中,在我的@MyErrorVariable中,只接受像“Acrwod Driv”这样的值,我的所有错误都在errors表中。 请提供任何意见或帮助。
谢谢

全文没有帮助,因为这是一个短语,创建全文索引需要一些时间

如果在“更正到错误”上有一对一的关系,为什么要有两个表

Fix 
Wrong  PK 
Right    

UPDATE addresses
   SET standarAddress = REPLACE (addresses.streetAddress, Fix.Wrong, Fix.Right)
  FROM addresses
 INNER JOIN Fix
    ON addresses.streetAddress LIKE Fix.Wrong + ' ' + '[0-9]%' 
   and standarAddress <> REPLACE (addresses.streetAddress, Fix.Wrong, Fix.Right)
Fix
错误主键
赖特
更新地址
SET standarAddress=REPLACE(addresses.streetAddress,Fix.error,Fix.Right)
来自地址
内连接固定
在addresses.streetAddress上,如Fix.Error+''+'[0-9]%
和标准地址替换(addresses.streetAddress,Fix.Error,Fix.Right)
你可能想打破它,因为200万是一个大的事务日志

UPDATE addresses
   SET standarAddress = REPLACE (addresses.streetAddress, Fix.Wrong, Fix.Right)
  FROM addresses
 INNER JOIN Fix
    ON addresses.streetAddress LIKE Fix.Wrong + ' ' + '[0-9]%' 
   and standarAddress <> REPLACE (addresses.streetAddress, Fix.Wrong, Fix.Right)
   and Substring(addresses.streetAddress, 0 , 1) = 'a' 
   and Substring(Fix.Wrong, 0 , 1) = 'a' 
更新地址
SET standarAddress=REPLACE(addresses.streetAddress,Fix.error,Fix.Right)
来自地址
内连接固定
在addresses.streetAddress上,如Fix.Error+''+'[0-9]%
和标准地址替换(addresses.streetAddress,Fix.Error,Fix.Right)
和子字符串(addresses.streetAddress,0,1)='a'
和子字符串(Fix.error,0,1)='a'
。。。B ... C
子字符串将使用索引

您能否提供一个示例,说明
LIKE
的工作不正确?我想,全文搜索不是你需要的解决方案。嗨!我显示的更新可以正常工作,有1000个地址要标准化,但我有100万个地址,这永远不会结束。所以,我认为使用全文搜索会更好。。。谢谢但是,如果我只使用一个表,我的寄存器会是什么?仅在一个表中更正错误?请参阅我的答案。它只用一张桌子。非常感谢您抽出时间。我只想有一张有错误和更正的表格,但我不知道怎么做。像这样的东西?字段:id(唯一)-错误-正确?您说错误和正确必须只有一个表?如果是这样,怎么办?这还不清楚。再次感谢!好的,你可以把它作为两个表来做,但是只需要让值成为PK。如果值必须是唯一的,则为错误设置单独的ID的目的是什么?