我正在尝试从用户输入的字符串设置搜索功能。 (例如:“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。
答案 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)
请注意,如果您的搜索条件列表很大,这可能不是您的最佳解决方案。
请注意,逗号应位于全名之间,而不是名字和姓氏。