【问题标题】:T-SQL, Dynamic WHERE 0=0T-SQL,动态 WHERE 0=0
【发布时间】:2014-06-19 09:56:27
【问题描述】:

你好。

在我的公司中,我们进行了大量报告,需要大量过滤器等来创建动态查询。

这导致我们经常需要制作可能有也可能没有任何限制的 T-SQL 块,并且它已经在这里练习了很长时间来解决这个问题:-

    WHERE 0=0
    --insert restrictions after this

原因?这样一来,您始终可以将您的和/或添加到限制中,而不必担心它是否实际上是首先添加的内容以及您是否需要添加和/或。

总而言之,这个问题的表现如何?不良做法或普遍接受的做法?

【问题讨论】:

  • 运行查询,显示实际的执行计划,你会发现WHERE 0=0 是否影响性能。我个人认为 SQL Query 编译器会去掉这个 where 语句
  • 请在这个问题的上下文中解释“解决这个问题”...好吗?我也不确定您要在这里解决什么问题...您是否遇到查询延迟?将“WHERE 0=0”投入生产似乎是多余的,因为它不会影响最终选择。
  • 简单,如果你不包含 0=0,你必须在逻辑上用之前的语言(通常是 C#)来解决它,如果它是添加的第一个限制。所以包括它你保存代码来确定这一点。因此,确定它是否是好的做法以及如果不是为什么不这样做,与其说是一个查询那样的问题。
  • 取一个有代表性的语句并在 SSMS 中运行它,并包含查询计划。取出 0 = 0 再次运行。比较查询计划。我很确定,就像@AcidJunkie 一样,不会有任何区别。如果有,请告诉我们!
  • 我认为这是不好的做法。以下代码应该做到这一点,而且 IMO 工作量不大: list.length == 0 ? String.Empty : " WHERE " + String.Join(" AND ", list.ToArray()));

标签: sql tsql dynamic


【解决方案1】:

它没有任何性能影响。类似问题的详细答案在这里T-SQL 1=1 Performance Hit和这里Whats the exact meaning of having a condition like where 0=0?

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 2012-02-07
    • 2021-08-30
    • 1970-01-01
    • 2016-01-16
    • 2023-03-10
    • 2014-03-22
    • 2019-09-27
    相关资源
    最近更新 更多