【发布时间】:2019-02-09 15:46:25
【问题描述】:
我创建了一个搜索器如下:
create procedure [dbo].[search_pazhoheshgar]
@se_code_melli varchar(10) = NULL,
@se_name nvarchar(30) = NULL,
@se_family nvarchar(30) = NULL,
@se_name_uni nvarchar(100) = NULL,
@se_name_reshte_tahsili nvarchar(50) = NULL
as
begin try
begin tran
set nocount on;
select
sabt.code_melli, sabt.name, sabt.family,
sabt_como_univercity.name_uni,
sabt_como_reshte.name_reshte_tahsili
from
sabt
inner join
sabt_como_univercity on sabt.univercity = sabt_como_univercity.id_uni
inner join
sabt_como_reshte on sabt.name_reshte = sabt_como_reshte.id_reshte_tahsili
where
@se_code_melli is not null
and @se_code_melli <> ''
and sabt.code_melli like '%' + @se_code_melli + '%'
or @se_name is not null
and @se_name <> ''
and sabt.name like '%' + @se_name + '%'
or @se_family is not null
and @se_family <> ''
and sabt.family like '%' + @se_family + '%'
or @se_name_uni is not null
and @se_name_uni <> ''
and sabt_como_univercity.name_uni like '%' + @se_name_uni + '%'
or @se_name_reshte_tahsili is not null
and @se_name_reshte_tahsili <> ''
and sabt_como_reshte.name_reshte_tahsili like '%' + @se_name_reshte_tahsili + '%'
commit tran
end try
begin catch
rollback tran
return -1
end catch
当我使用参数搜索时,这不是问题。但是当我设置几个参数时,最后输入的参数被放置为搜索条件。 显然,这个问题是由于OR的存在。现在如果我使用 AND 而不是 OR,我不能将值设为 NULL,因为搜索无效。我该怎么办?
【问题讨论】:
-
sqlsentry.tv/the-kitchen-sink-procedure
-
另外,请不要害怕在编写查询时使用空格。它不仅对您自己,对其他人也更具可读性。
标签: sql sql-server stored-procedures