【发布时间】:2014-10-09 07:39:54
【问题描述】:
我正在尝试使用另一个表 (DNI_Names) 中的列的详细信息来搜索一个表 (Asset_Database_Current) 中的列。我编写了一个循环来遍历每个 DNI_Name,然后使用 SELECT CONTAINS 语句(希望)将 DNI_Name 与 Asset_Database_Current 中的相关列进行比较。
我已经建立了一个全文目录,并且已经为 Asset_Database_Current 表建立了索引以供搜索。
这是我的代码:
DECLARE
@Asset varchar(8)
, @software_Name VARCHAR(64)
, @dniSW VARCHAR(64)
, @DNI VARCHAR(64)
CREATE TABLE #temp_naughtyChildren (naughtyAsset CHAR(8), naughtySW VARCHAR(64))
-- ^ where the Naughty People eventually get put
DECLARE #dni_cur CURSOR FOR
SELECT DNI_Names.DNI_Name
FROM DNI_Names
OPEN #dni_cur
FETCH NEXT FROM #dni_cur
INTO @DNI
WHILE @@FETCH_STATUS = 0
BEGIN -- we go through DNI_Names, selecting each instance of DNI_Name one at a time...
INSERT INTO #temp_naughtyChildren (naughtyAsset, naughtySW)
SELECT Asset_Number, Software_Name
FROM Asset_Database_Current
WHERE CONTAINS (Asset_Database_Current.Software_Name, @DNI)
FETCH NEXT FROM #dni_cur
INTO @DNI
END
DEALLOCATE #dni_cur
-- #temp_NaughtyChildren is now full of all the Asset Numbers and swName's of people who
-- have been very, very naughty. The table can now be used as required (emailed, sent to
-- another d/b, etc.).
SELECT * from #temp_NaughtyChildren ORDER BY naughtyAsset
DROP TABLE #temp_naughtyChildren
END
GO
上面的代码成功完成,但是当我尝试执行查询时,我得到了两次以下错误:
消息 7630,级别 15,状态 3,过程 DNIChecker,第 44 行 全文搜索条件“App Manager”中“Manager”附近的语法错误。
我的老板也执行了查询(他对数据库拥有完全权限)并且得到了完全相同的错误。
您能给我的任何建议都会非常感激(我从 1998 年开始就没有学过 SQL,我意识到当他们在 Uni 教你 SQL 时,他们实际上并没有教你太多 SQL,我已经花了在过去的 2 1/2 周里,我在各种网站上搜索。直到昨天,我终于偶然发现了一篇文章,提到有一个设置全文搜索的向导!!)。
谢谢,M
【问题讨论】:
-
我认为您的循环是多余的,因为您一次搜索一个关键字(似乎是这样,对吗?)您可以通过
OR将它们连接为 @ 来一次搜索多个关键字pln 在他的回答中也提到了(如果可以使用不同的搜索词找到相同的行,如果您想要重复的结果条目,您可能不想丢失循环)
标签: sql sql-server-2008 tsql