在SQL Server表中搜索值列表的最有效方法

本文关键字:列表 有效 方法 搜索 SQL Server | 更新日期: 2023-09-27 17:53:51

我正在研究一个c# Win-forms应用程序,它连接到SQL Server数据库。我有一种情况,我必须从Excel表中解析数据,并在表的所有列中搜索每个值。并在最后显示表中值匹配的行。

现在我要做的是

  1. 我已将整个Excel工作表解析为DataTable
  2. 我在SQL服务器中有一个存储过程,它接受字符串输入并在表的所有列中搜索它,如果有匹配,则返回一行。
  3. 现在我将Datatable的每个值(从excel表中提取)传递给存储过程进行搜索。

请指导我这是否是一种有效的方式,或者给我建议如何有效地实现它。

在SQL Server表中搜索值列表的最有效方法

您可以使用Table Valued参数,然后在SQL中您可以在传递的表上使用cursorloop并搜索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导入到数据库表中,并可以在存储过程中使用循环或游标搜索表