【发布时间】: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()));