可以这样,存储过程的参数仍然使用两个参数,调用的时候,可以传递NULL值,例如:EXECUTE au_info 'firstname',NULL
--或者
EXECUTE au_info NULL,'lastname'然后,你再修改一下存储过程,在存储过程中判断一下参数是否为NULL,如果有一个为NULL,则不搜索该参数,如果两个都不为NULL,则搜索两个字段都满足的记录.
这样你在以后的使用过程中,也会方便一些.
--或者
EXECUTE au_info NULL,'lastname'然后,你再修改一下存储过程,在存储过程中判断一下参数是否为NULL,如果有一个为NULL,则不搜索该参数,如果两个都不为NULL,则搜索两个字段都满足的记录.
这样你在以后的使用过程中,也会方便一些.
@name varchar(40)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @name
OR au_lname = @name
GO 但是这样的话,你想同时搜索两个字段就没办法了
@lastname varchar(40)=null,
@firstname varchar(20)=null
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
string strsql = " select * from table where ";if(lastname != "")
strsql = strsql + lastname;if(firstname != "")
strsql = strsql + firstname;
这样的功能我想在存储过程中实现,请问怎么实现?
............
else
if @par1 is not null and @par2 is null
.......................
else
if ....
declare @sql varchar(1000)
set @sql='select * from tb where 1=1 '
if @p1 is not null
set @sql=@sql + ' and field1=' + @p1
if @p2 is not null
set @sql=@sql + ' and field2=' + @p2--2,若是采用的非动态语句select * from tb
where field1=case when @p1 is null then field1 else @p1 end
and field2=case when @p2 is null then field2 else @p2 end
(
@p1 varchar(20) = null,
@p2 varchar(20) = null
)
as
begin
......
end
只要在建存储过程的时候,参数是有设定默认值,则在执行存储过程的时候可以不传入参数。此时若只想传p2,可以
test_pro @p2 = 'hello'大家可以试下
@lastname varchar(40)=null,
@firstname varchar(20)=null
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = isnull(@firstname,au_fname)
AND au_lname = isnull(@lastname,au_lname)
GO