gpt4 book ai didi

sql-server - 在 WHERE 子句中使用可选参数

转载 作者:行者123 更新时间:2023-12-04 21:56:10 25 4
gpt4 key购买 nike

我有一个SP

ALTER PROCEDURE dbo.sp_Compare
@lst varchar(100),
@frst varchar(100) = NULL,
@passportNo varchar(50) = NULL
AS
SELECT * FROM dbo.User
WHERE LastName like '%' + @lst + '%'
AND (
FirstName like @frst + ' %'
OR FirstName like '% ' + @frst + ' %'
OR FirstName like '% ' + @frst
OR FirstName = @frst
)
OR Passport = @passportNo;

有时 @frs@passportNo 或两者的详细信息可能不可用

所以我想更改上述查询,以便在未传递可选参数时(即,当其值为 null 时)不应考虑对该特定列进行过滤

即,如果 @frst 为 NULL,则不应根据 FirstName 过滤结果,它应该像没有 FirstName 一样工作,如 '%' + @frst + ' %' WHERE 子句中的条件..

如何在不针对不同情况重复编写相同逻辑的情况下编写查询?

最佳答案

WHERE (@frst IS NULL OR 
(
LastName like '%' + @lst + '%'
AND (
FirstName like @frst + ' %'
OR FirstName like '% ' + @frst + ' %'
OR FirstName like '% ' + @frst
OR FirstName = @frst
)
)
)
AND (@passportNo IS NULL OR
Passport = @passportNo);

编辑:实际上这应该更有效率:

WHERE ( @frst IS NULL OR FirstName like '%' + @frst + '%' )
AND ( @lst IS NULL OR LastName like '%' + @lst + '%' )
AND ( @passportNo IS NULL OR Passport = @passportNo )

关于sql-server - 在 WHERE 子句中使用可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com