【发布时间】:2013-09-08 23:52:27
【问题描述】:
只是想知道在 T-sql 存储过程中执行条件 WHERE 子句的最佳方法是什么?我不想使用动态 sql - 我宁愿使用参数化的 sproc。
我的参数不能为 NULL,但它们可以是空字符串。如果它们是空字符串,我想“跳过”where 子句的那部分。
没有 if/else 它看起来像这样;
CREATE PROCEDURE [MyProc]
(
@Criteria1 nvarchar(50),
@Criteria2 nvarchar(50),
@Criteria3 nvarchar(50)
)
AS
SELECT top 250 * FROM [MyTable]
where
Col1 LIKE '%' + @Criteria1 + '%' and
Col2 LIKE '%' + @Criteria2 + '%' and
Col3 LIKE '%' + @Criteria3 + '%'
出于性能原因,如果特定条件为 ''(空字符串),我想跳过 LIKE 搜索。
谢谢
【问题讨论】:
-
请务必了解
Col_n LIKE '%' + @Criteria1 + '%'最多执行索引扫描,最坏执行表扫描,因为 like 模式中的前导通配符。如果您的数据表大小不一,您将希望尽快重新考虑这种设计。 -
谢谢彼得。我将放弃领先的 %。