此答案已重建,以解决您的问题,使得多个字符串必须跨字段存在。请注意,在CompanyContactLink链接表中的单个键:
CREATE FULLTEXT CATALOG CompanyContact WITH ACCENT_SENSITIVITY = OFF
GO
CREATE TABLE Contact (ContactKey INT IDENTITY, FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL)
ALTER TABLE Contact ADD CONSTRAINT PK_Contact PRIMARY KEY NONCLUSTERED (ContactKey)
CREATE TABLE Company (CompanyKey INT IDENTITY, CompanyName VARCHAR(50) NOT NULL)
ALTER TABLE Company ADD CONSTRAINT PK_Company PRIMARY KEY NONCLUSTERED (CompanyKey)
GO
CREATE TABLE CompanyContactLink (CompanyContactKey INT IDENTITY NOT NULL, CompanyKey INT NOT NULL, ContactKey INT NOT NULL)
GO
INSERT INTO Contact (FirstName, LastName) VALUES ('Dipper', 'Pines')
INSERT INTO Contact (FirstName, LastName) VALUES ('Mabel', 'Pines')
INSERT INTO Contact (FirstName, LastName) VALUES ('Stanley', 'Pines')
INSERT INTO Contact (FirstName, LastName) VALUES ('Soos', 'Ramirez')
INSERT INTO Contact (FirstName, LastName) VALUES ('Wendy', 'Corduroy')
INSERT INTO Contact (FirstName, LastName) VALUES ('Sheriff', 'Blubs')
INSERT INTO Contact (FirstName, LastName) VALUES ('Bill', 'Cipher')
INSERT INTO Contact (FirstName, LastName) VALUES ('Pine Dip', 'Nobody')
INSERT INTO Contact (FirstNAme, LastName) VALUES ('Nobody', 'Pine Dip')
INSERT INTO Company (CompanyName) VALUES ('Mystery Shack')
INSERT INTO Company (CompanyName) VALUES ('Greesy Diner')
INSERT INTO Company (CompanyName) VALUES ('Watertower')
INSERT INTO Company (CompanyName) VALUES ('Manotaur Cave')
INSERT INTO Company (CompanyName) VALUES ('Big Dipper Watering Hole')
INSERT INTO Company (CompanyName) VALUES ('Lost Pines Dipping Pool')
GO
INSERT INTO CompanyContactLink Values (3, 5), (1, 1), (1, 2), (1, 3), (1, 4), (1,5), (5,1), (3,1), (4,1)
GO
CREATE FULLTEXT INDEX ON Contact (LastName, FirstName)
KEY INDEX PK_Contact
ON CompanyContact
WITH STOPLIST = SYSTEM
CREATE FULLTEXT INDEX ON Company (CompanyName)
KEY INDEX PK_Company
ON CompanyContact
WITH STOPLIST = SYSTEM
GO
CREATE VIEW CompanyContactView
WITH SCHEMABINDING
AS
SELECT
CompanyContactKey,
CompanyName,
FirstName,
LastName
FROM
dbo.CompanyContactLink
INNER JOIN dbo.Company ON Company.CompanyKey = CompanyContactLink.CompanyKey
INNER JOIN dbo.Contact ON Contact.ContactKey = CompanyContactLink.ContactKey
GO
CREATE UNIQUE CLUSTERED INDEX idx_CompanyContactView ON CompanyContactView (CompanyContactKey);
GO
CREATE FULLTEXT INDEX ON CompanyContactView (CompanyName, LastName, FirstName)
KEY INDEX idx_CompanyContactView
ON CompanyContact
WITH STOPLIST = SYSTEM
GO
-- Wait a few moments for the FULLTEXT INDEXing to take place.
-- Check to see how the index is doing ... repeat the following line until you get a zero back.
DECLARE @ReadyStatus INT
SET @ReadyStatus = 1
WHILE (@ReadyStatus != 0)
BEGIN
SELECT @ReadyStatus = FULLTEXTCATALOGPROPERTY('CompanyContact', 'PopulateStatus')
END
SELECT
CompanyContactView.*
FROM
CompanyContactView
WHERE
FREETEXT((FirstName,LastName,CompanyName), 'Dipper') AND
FREETEXT((FirstName,LastName,CompanyName), 'Shack')
GO
并为你的榜样,为了与温迪在沃特陶:
SELECT
CompanyContactView.*
FROM
CompanyContactView
WHERE
FREETEXT((FirstName,LastName,CompanyName), 'Wendy') AND
FREETEXT((FirstName,LastName,CompanyName), 'Watertower')
GO
你能分享有关模型的一些信息?到目前为止,我的理解是,您有两个表格:联系人和公司,并且每个表都包含ContactKey。我猜测,ContactKey不是您正在搜索的值。 – Paurian
@Paurian,请参阅我的更新,并告诉我您是否需要更多信息。谢谢。 – adam0101
@BogdanSahlean引发错误,指出CompanyContact不能成为CONTAINSTABLE查询的一部分,因为它不是全文索引的,而且我也无法向它添加全文索引,因为该表中没有文本。 – adam0101