gpt4 book ai didi

c# - 如何循环 SQL 参数列表和 WHERE 子句?或者更有效地获得结果?

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:59 25 4
gpt4 key购买 nike

什么是最好的方法?我有一个 C# .NET Web 窗体网站,该网站根据一个或多个标签收集用户配置文件列表。该站点连接到 SQL 数据库,并使用存储过程进行大多数数据检索

我的第一个(半迟钝的)想法是构建一个参数列表:tag1、tag2、tagN。将该列表传递给 SP。在 SP 中,通过遍历参数来构建 WHERE 子句。

在我什至可以执行 WHERE 循环之前,我将如何在 SQL 中构建我的参数?

如果我可以向 SP 传递一个数组或列表,然后分解并构建我的查询,那就太好了。但是,我不知道该怎么做 - 如果我这样做了,我怀疑效率是否理想。

我可以使用 CommandType.Text 并在代码中发出一个巨大的查询。这听起来也不是很有效率。我想尽可能地分离 SQL/C# 的东西。这个网站已经是一团糟了..

大家有什么想法吗?

最佳答案

Table Valued Parameters将是这里的理想解决方案(假设您使用的是 SQL Server 2008)。它们允许您将数据集发送到 SQL Server(在 2008 年及更高版本中),然后在您的存储过程中将该数据作为一个集进行处理(这意味着您实际上可以在该集上进行连接,使用 EXISTS也许等等)。

如果您使用的不是 SQL Server 2008,您有两个选择,第一个是构造一个 XML 文档,然后使用 SQL Server's XML support (2005 及更高版本)将输入的文档(通过字符串或 XML 参数)解析为一个数据集,您可以对其执行连接/筛选。

或者,您也可以发送您可以使用的自定义格式 SQL CLR处理方法(任何类型的过程代码,如解析,通常在 SQL CLR 方法中性能更高;SQL Server 更适合基于集合的操作)。

最后,由于您是在代码中动态生成此查询,因此不必将集合作为参数传递,您始终可以附加参数。但是,不言而喻,您不应该只调用 ToString 然后附加参数;您应该创建一个有效的参数名称(不难做到)将其附加到 IN 子句中引用的集合,然后将参数添加到具有正确值的命令中。这假设您的 IN 子句引用的值的数量不超过命令中允许的参数数量。

关于c# - 如何循环 SQL 参数列表和 WHERE 子句?或者更有效地获得结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com