Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与CONTAINS抗争(SQL Server 2008)_Sql_Sql Server 2008_Tsql - Fatal编程技术网

与CONTAINS抗争(SQL Server 2008)

与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

我试图搜索一个表(Asset_Database_Current)中的一列,其中包含另一个表(DNI_Names)中某列的详细信息。我已经编写了一个循环来遍历每个DNI_名称,然后是一个SELECT CONTAINS语句(希望)将DNI_名称与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 
上述代码成功完成,但当我尝试并执行查询时,两次出现以下错误:

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在回答中也提到的那样(如果使用不同的搜索词可以找到同一行,则如果希望结果具有重复条目,则可能不希望丢失循环)