gpt4 book ai didi

c# - 有什么方法可以缩短具有大量字段的查询吗?

转载 作者:行者123 更新时间:2023-11-30 22:52:21 25 4
gpt4 key购买 nike

我有一个包含 42 个字段的表。然而,他们中的大多数大致相似。我有 20 个名为 a01a20 的字段,还有另外 20 个名为 b01b20 的字段。另外 2 个是 PK 和 FK。

有什么方法可以缩短 INSERT 查询吗?现在,由于 PK,我必须指定我正在使用的列,例如:

INSERT INTO Table01 (col_FK, a01, b01, a02, b02.....(etc)

但是,我遇到的真正麻烦是我的 SELECT 查询。我的查询基本上允许用户搜索一个或多个字段,如果字段留空,则使用 NULL 作为比较。

SELECT * FROM Table01 WHERE
(@col_FK IS NULL OR col_FK LIKE @col_FK)
AND (@a01 IS NULL OR a01 LIKE @a01)
AND (@b01 IS NULL OR b01 LIKE @b01)
etc...

因此,例如,如果我只在 a01 中输入了一些内容,而将其余部分留空,则查询将如下所示:

SELECT * FROM Table01 WHERE
(NULL IS NULL OR col_FK LIKE NULL)
AND ('text' IS NULL OR a01 LIKE 'text')
AND (NULL IS NULL OR b01 LIKE NULL)
etc...

真的不想对所有 40 个字段都这样做,所以有什么办法可以缩短它吗?

注意上面的因式分解(@a01@b01)是在 c# 中完成的,因此我可以将参数传递给查询。

最佳答案

我将在 INSERT 语句中指定列。如果将新列添加到表中,那么您的语句将更有可能“有效”。如果(确认!)表中的列被重新排序,您的语句将不会受到影响。

至于使 SELECT 语句更短……这是一个单一的静态 SQL 语句与 SQL 语句的多个变体的问题。对于 MySQL 以外的数据库(如 Oracle 或 SQL Server,我个人的偏好是使用带有绑定(bind)占位符的单个静态 SQL 语句。然后,我只有一个需要调整的 SQL 语句,它保留在池中并被重用,没有十几个或更多不同的变体。

当我有一个 col IN (?,?,?) 时,我会选择动态 SQL,列表中的值数量是可变的。然后就是绑定(bind)占位符有多少,对应的绑定(bind)参数有多少。

如果动态 SQL(多个变体)可以为我提供更好的查询计划,我也会选择它,也就是说,它可以用更少的资源获得更好的执行时间。这只是一些将 AND a17 LIKE CONCAT('%',?,'%') 附加到 SQL 文本的代码以及用于绑定(bind)的相应代码的问题。同样,只有在性能得到提升的情况下,我才会费心这样做。

我不会为了“更短”的 SQL 语句而“缩短”任何 SQL 语句。这对我来说没有意义,因为我宁愿聚集一小群声明,即使其中一些声明很大。 (就管理语句桶而言,一个大型语句实际上比一大堆彼此相似的较小语句更容易管理。

关于c# - 有什么方法可以缩短具有大量字段的查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789273/

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