在 SQL Server 表中搜索值列表的最有效方法
Posted
技术标签:
【中文标题】在 SQL Server 表中搜索值列表的最有效方法【英文标题】:Most Efficient way of searching a List of values in an SQL Server table 【发布时间】:2015-08-19 23:05:32 【问题描述】:我正在开发一个连接到 SQL Server 数据库的 C# Win-forms 应用程序。我有一种情况,我必须解析 Excel 工作表中的数据并搜索表所有列中的每个值。并在最后显示值匹配的表行。
现在我正在做的是
-
我已将整个 Excel 工作表解析为 DataTable
我在 SQL Server 中有一个存储过程,它接受一个字符串输入并在表的所有列中搜索它,如果匹配则返回一行。
现在我将 Datatable 的每个值(从 Excel 表中提取)传递给存储过程进行搜索。
请指导我这是否是一种有效的方法,或者给我建议以有效地实现它。
【问题讨论】:
你在 excel 中只有一列吗?我的意思是你只会从 SQL 中的每一行 excel 中搜索一个值? 您能否向我们展示您的实际代码以便更好地理解? @MairajAhmad,不,我在 excel 表中有多个列 你将不得不在sql中搜索excel的每一列值? 您可以将整个数据表传递给 sql,而不是在 SQL 中,您可以在 SQL 中使用循环或游标来提取值并在表中搜索/ 【参考方案1】:您可以使用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 的参数中获取值,您必须使用循环或使用游标。 Here 是另一个例子的链接
【讨论】:
【参考方案2】:您可以使用SQL Server SSIS包,直接将excel导入数据库表,并可以在存储过程中使用循环或游标搜索表
【讨论】:
你能证明这是最有效的方法吗? 是的,而不是进行多个数据库调用,将立即导入 excel 文件。所以这是一种有效的方法。以上是关于在 SQL Server 表中搜索值列表的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中检查逗号分隔字符串中是不是存在子字符串的最有效方法