如何使用一组单词搜索我的数据库?

时间:2011-12-06 21:48:52

标签: asp.net sql-server vb.net arrays stored-procedures

我正在尝试从用户输入的字符串设置搜索功能。 (例如:“John Doe”或“Doe,John”) 我以为我会使用Replace(SearchString, ",", "")来删除用户可能输入的逗号,然后使用Split(SearchString, " ")将所有单词放入数组中。一旦他们进入数组,我就会对每个术语执行一个存储过程,并用结果构建一个DataTable。

以下是我想用来执行存储过程的内容。

oCommand = DataAccess.GetSQLCommand("MyStoredProcedure", CommandType.StoredProcedure, SourceServer.ConnectionLocal)
oCommand.Parameters.AddWithValue("@MySearchString", SearchString)

oAdapter = New SqlDataAdapter(oCommand)

oAdapter.Fill(MyDataTable)

现在我正在思考我将在循环浏览单词数组时分配的“SearchString”......但这似乎不是正确的方法。也许是,但我不知道如何将我的下一个结果附加到之前的DataTable。

2 个答案:

答案 0 :(得分:2)

在此页面上有一些在SQL Server中使用数组和列表的好主意 - http://www.sommarskog.se/arrays-in-sql-2005.html

我个人认为XML方法最有用; http://www.sommarskog.se/arrays-in-sql-2005.html#XML

我过去如何使用它的一个例子是

 DECLARE @indata nvarchar(max)
 DECLARE @hDoc int
 SET @indata = '
    <ROOT>
        <SearchTerm code="Test search term"></SearchTerm>
        <SearchTerm code="Other search term"></SearchTerm>
        <SearchTerm code="Next search term"></SearchTerm>
    </ROOT>'

 CREATE TABLE #searchTerm (
    code varchar(40)
 )   

 EXEC sp_xml_preparedocument @hDoc OUTPUT, @indata

 INSERT Into #searchTerm
 SELECT code
 FROM OPENXML(@hDoc, '/ROOT/SearchTerm',1) 
     WITH (code varchar(50))

 EXEC sp_xml_removedocument @hDoc    

 -- Use the data in #searchTerm as needed in your query
 SELECT * FROM MyTable WHERE searchValue IN (SELECT code FROM #searchTerm) 

 DROP TABLE #searchTerm

答案 1 :(得分:1)

尝试将逗号分隔值作为单个字符串nvarchar传递。然后在存储过程中使用SELECT FROM WHERE IN结构。通过串联在存储过程中创建sql命令,然后调用EXEC @sql

Declare @sql = 

'SELECT * FROM tbl
WHERE person IN(' + @Application + ')'

exec(@sql)

请注意,如果您的搜索条件列表很大,这可能不是您的最佳解决方案。

请注意,逗号应位于全名之间,而不是名字和姓氏。