与CONTAINS抗争(SQL Server 2008)
我试图搜索一个表(Asset_Database_Current)中的一列,其中包含另一个表(DNI_Names)中某列的详细信息。我已经编写了一个循环来遍历每个DNI_名称,然后是一个SELECT CONTAINS语句(希望)将DNI_名称与Asset_Database_Current中的相关列进行比较 我已经建立了一个全文目录,并为资产数据库和当前表编制了索引,以便进行搜索 这是我的代码:与CONTAINS抗争(SQL Server 2008),sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我试图搜索一个表(Asset_Database_Current)中的一列,其中包含另一个表(DNI_Names)中某列的详细信息。我已经编写了一个循环来遍历每个DNI_名称,然后是一个SELECT CONTAINS语句(希望)将DNI_名称与Asset_Database_Current中的相关列进行比较 我已经建立了一个全文目录,并为资产数据库和当前表编制了索引,以便进行搜索 这是我的代码: DECLARE @Asset varchar(8) , @software_Name VARCH
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
上述代码成功完成,但当我尝试并执行查询时,两次出现以下错误:
Msg 7630,15级,状态3,程序DNIChecker,第44行
全文搜索条件“App Manager”中“Manager”附近的语法错误
我的老板也执行了查询(他对数据库拥有完全权限),他得到了完全相同的错误
如果您能给我任何建议,我将不胜感激(我从1998年开始就没有做过SQL,我意识到当他们在大学教你SQL时,他们实际上并没有教你很多SQL,而我在过去的2个半星期里一直在搜索各种各样的网站。就在昨天,我终于偶然发现了一篇文章,其中提到有一个向导可以设置全文搜索!!)
谢谢,如果您使用完整短语,M需要在搜索条件周围使用qoutes,否则应在单个单词之间使用NEAR、AND或
SET @DNI = '"' + @DNI + '"';
INSERT INTO #temp_naughtyChildren (naughtyAsset, naughtySW)
SELECT Asset_Number, Software_Name
FROM Asset_Database_Current
WHERE CONTAINS (Asset_Database_Current.Software_Name, @DNI)
不幸的是,这给了我:“靠近“+”的语法不正确。”对不起,我修改了第一次不起作用的答案(出于某种原因,尽管我怀疑SQL Server 2008是由情绪化的小精灵操作的),但它第二次成功了。非常感谢你对pln的所有帮助!!!我认为你的循环是多余的,因为你一次搜索一个关键字(似乎是这样,对吗?),你可以通过
或连接多个关键字,一次搜索多个关键字,正如@pln在回答中也提到的那样(如果使用不同的搜索词可以找到同一行,则如果希望结果具有重复条目,则可能不希望丢失循环)