27,579
社区成员
发帖
与我相关
我的任务
分享
--假设传入的参数代表值
create proc p
@a varchar(10),
@b varchar(10),
@c varchar(10),
@d varchar(10)
as
begin
select * from tb where a=isnull(@a,a) and b=isnull(@b,b) and c=isnull(@c,c) and d=isnull(@d,d)
--例如当@a传入的为null,则是 where a=a and b=@b ... 当然,不一定是=号,具体的看你字段类型,及传入参数的意义来确定
end
--假设传入的参数代表列名
create proc p
@a varchar(10),
@b varchar(10),
@c varchar(10),
@d varchar(10)
as
begin
declare @s varchar(8000)
select @s='select * from tb where 1=1 '
if isnull(@a,'') !=''
set @s=@s + ' and [' + @a + ']=''xx'''
if isnull(@b,'') !=''
set @s=@s + ' and [' + @b + ']=''vvv'''
...
end
CREATE PROC getQueryInfo(
@a NVARCHAR(10)=NULL,
@b NVARCHAR(10)=NULL,
@c NVARCHAR(10)=NULL,
@d NVARCHAR(10)=NULL
)
AS
BEGIN
DECLARE @strWhere NVARCHAR(100)
SET @strWhere='1=1'
IF @a IS NOT NULL
BEGIN
SET @strWhere=@strWhere +' And a=@a'
END
---
--.....
--....
EXEC ('SELECT * FROM tb WHERE'+ @strWhere)
END