在SQL Server表中搜索值列表的最有效方法
本文关键字:列表 有效 方法 搜索 SQL Server | 更新日期: 2023-09-27 17:53:51
我正在研究一个c# Win-forms应用程序,它连接到SQL Server数据库。我有一种情况,我必须从Excel表中解析数据,并在表的所有列中搜索每个值。并在最后显示表中值匹配的行。
现在我要做的是
- 我已将整个Excel工作表解析为DataTable
- 我在SQL服务器中有一个存储过程,它接受字符串输入并在表的所有列中搜索它,如果有匹配,则返回一行。
- 现在我将Datatable的每个值(从excel表中提取)传递给存储过程进行搜索。
请指导我这是否是一种有效的方式,或者给我建议如何有效地实现它。
您可以使用Table Valued
参数,然后在SQL中您可以在传递的表上使用cursor
或loop
并搜索SQL表中的每个列。下面是一个简单的例子。
创建一个新的Tpye
CREATE TYPE [dbo].[SearchInDB] AS TABLE(
[Id] [int] NOT NULL
)
在SP中,您将从c#代码传递此类型。您的SP将收到如下内容
ALTER PROCEDURE [dbo].[YourSPNameHere]
@DataToSearch dbo.SearchInDB ReadOnly
AS
BEGIN
--Your SP logic here
END
在你的代码中,你将创建一个DataTable
和填充数据表的值,并传递给SP,像这样
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
//Add rows in datatable with values
DataRow dr = dt.NewRow();
dr["Id"] = 10;
dt.Rows.Add(dr);
//Now pass this table to SP as parameter
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DataToSearch";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.Value = dt;
注意
我只添加了一列,如果需要,您必须添加其他列。要从传递给SP的参数中获取值,必须使用循环或游标。下面是另一个示例的链接
您可以使用SQL Server SSIS包,直接将excel导入到数据库表中,并可以在存储过程中使用循环或游标搜索表