所以我有一个stored procedure
接受产品代码的产品,例如1234567890
. 我想为这些产品提供通配符搜索选项。(即123456*
)并让它返回所有匹配的产品。做这个的最好方式是什么?
我过去使用过类似下面的东西:
SELECT @product_code = REPLACE(@product_code, '*', '%')
然后LIKE
在现场进行搜索product_code
,但我觉得它可以改进。
所以我有一个stored procedure
接受产品代码的产品,例如1234567890
. 我想为这些产品提供通配符搜索选项。(即123456*
)并让它返回所有匹配的产品。做这个的最好方式是什么?
我过去使用过类似下面的东西:
SELECT @product_code = REPLACE(@product_code, '*', '%')
然后LIKE
在现场进行搜索product_code
,但我觉得它可以改进。
你已经在做的事情就是你能做的最好的事情。
您可能会尝试的一种优化是确保您允许的列上有一个索引。SQL Server 仍然需要对通配符搜索进行全面扫描,但它只会针对特定索引而不是完整表。
与往常一样,在任何更改之前和之后检查查询计划是一个好主意。
这取决于,但您可能需要考虑:
默认情况下始终查找子字符串。例如,如果用户输入“1234”,您搜索:
WHERE 产品如“%1234%”
允许用户完全控制。即简单地接受他们的输入并将其传递给LIKE
子句。这意味着他们可以提出自己的自定义搜索。这仅在您的用户有兴趣学习时才有用。
WHERE 产品如@input