1
17
而
这些类型的SP可以很容易地生成代码(并为表更改重新生成)。 您有几个处理数字的选项——这取决于您想要确切的语义还是搜索语义。 |
2
10
实现这种类型搜索的最有效方法是使用存储过程。这里显示的语句创建一个接受所需参数的过程。如果未提供参数值,则将其设置为空。
摘自本页: http://www.sqlteam.com/article/implementing-a-dynamic-where-clause 我以前做过。它运作良好。 |
3
5
Erland Sommarskog的文章 Dynamic Search Conditions in T-SQL 是如何做到这一点的很好的参考。Erland提供了一些策略,说明如何在不使用动态SQL的情况下实现这一点(只是简单的if块、or、coalesce等),甚至列出了每种技术的性能特征。 如果您必须咬紧牙关并通过动态SQL路径,您还应该阅读erland的 Curse and Blessings of Dynamic SQL 在那里他给出了一些关于如何正确地编写动态SQL的提示 |
4
3
使用coalesce方法有一个问题,即如果列的值为空,则传入空搜索条件(即忽略搜索条件)将不会返回许多数据库中的行。 例如,在SQL Server 2000上尝试以下代码:
您只能返回两行,因为在列中,我的字符串为空的行中,您可以有效地获取:
但是,当然,空不等于空。 我努力坚持:
当然,你可以把它调整为使用外卡或者其他你想做的事情。 |
5
2
可以这样做,但通常这些厨房水槽程序会导致一些糟糕的查询计划。 尽管如此,这里还是最常用于“可选”参数的策略。通常的方法是将空值视为“ommitted”。
编辑: 更好的方法是参数化查询。 以下是世界上最权威的博客,来自llblgen pro fame的frans bouma: |
6
0
从我的日志中复制此内容:
|
7
0
我们可以使用泛型@search参数,并将任何值传递给它进行搜索。
|
8
-1
我的第一个想法是写一个这样的查询…
…这样,如果调用方想要搜索某个特定字段,就需要提供一个位标志,如果要搜索该字段,就需要提供该值,但我不知道这是在创建一个草率的WHERE子句,还是在WHERE子句中使用CASE语句。 正如您所看到的,这个特定的代码在T-SQL中,但是我也很乐意看到一些PL-SQL/MySQL代码,并相应地进行调整。 |
9
-1
我将坚持使用空/合并方法来处理特殊查询,然后测试以确保没有性能问题。 如果发现查询运行缓慢,因为在对索引列进行搜索时,它正在进行表扫描,则可以使用允许对这些索引字段进行搜索的其他特定过程来补充通用搜索存储过程。例如,您可以有一个特殊的SP,它可以按customerid或姓氏/名字进行搜索。 |
10
-3
编写一个过程来插入名称以in表开头的所有员工数据?? |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |