我是动态查询的新手,我遇到的情况是我必须将多个值传递给存储过程的单个参数。但事情是有可能有过滤器或可能没有。
意味着该参数可以有where子句,或者可能没有。
我可以在where子句中有条件,有时可以为null,或者那些条件会有一些值。
当参数有多个值并且必须在where子句中传递时,我被卡住了。
我编写了一个小代码,如果filter中的值为0,即我没有过滤该特定列的过滤器以及传递单个参数,但我不知道如何传递多个参数。我寻找它有通过XML我不能使用,还有我的高级不想添加更多负载的UDF。那么,是否可以在不使用任何临时表或UDF的情况下传递多个参数?
我在这里发布我的代码:
alter procedure db.test_1
(@param1 varchar(10), @param2 varchar(10),
@param3 varchar(10), @param4 varchar(10), @param5 varchar(10))
as
begin
declare @id varchar(250)
declare @type varchar(250)
declare @xyz varchar(250)
declare @name varchar(250)
declare @abc varchar(250)
declare @sql varchar(800)
set @id = case when convert(varchar,@param1)='0' then ''
when @param1 like '%%' then 'id in ('+convert(varchar,@param)+')'
else 'id='+@param1 end ;
set @type = case when convert(varchar,@param2)='0' then ''
else '@type='+@param2 end ;
set @xyz = case when convert(varchar,@param3)='0' then ''
else '@xyz='+@param3 end ;
set @name = case when convert(varchar,@param4)='0' then ''
else '@name='+@param4 end ;
set @abc = case when convert(varchar,@param5)='0' then ''
else '@abc='+@param5 end ;
set @sql = 'select sum(column_1) from db.test_1 where '+@id+'and'+@type+'and'+@xyz+'and'+@name+'and'+ @abc
select @sql; -- to know what query is running
--execute(@sql)
end
我需要帮助:
case when convert(varchar,@param1)='0' then ''
when @param1 like '%%' then 'carrier_id in ('+convert(varchar,@param)+')'
else 'id='+@param1 end ;
这里我如何判断'%%'
意思是有多个参数传递
欢迎您的任何帮助,如果您不明白,请发表评论吗?
答案 0 :(得分:0)
使用此
alter procedure test_1
(@param1 varchar(10), @param2 varchar(10),
@param3 varchar(10), @param4 varchar(10), @param5 varchar(10))
as
begin
declare @id varchar(250)
declare @type varchar(250)
declare @xyz varchar(250)
declare @name varchar(250)
declare @abc varchar(250)
declare @sql varchar(800)
set @id = case when convert(varchar,@param1)='0' then '1=1'
when @param1 like '%%' then 'id in ('+convert(varchar,@param1)+')' end ;
set @type = case when convert(varchar,@param2)='0' then '1=1'
else '@type='+@param2 end ;
set @xyz = case when convert(varchar,@param3)='0' then '1=1'
else '@xyz='+@param3 end ;
set @name = case when convert(varchar,@param4)='0' then '1=1'
else '@name='+@param4 end ;
set @abc = case when convert(varchar,@param5)='0' then '1=1'
else '@abc='+@param5 end ;
set @sql = 'select sum(column_1) from db.test_1 where '+@id+' and '+@type+' and '+@xyz+' and '+@name+' and '+ @abc
select @sql; -- to know what query is running --execute(@sql)
end
将此sp称为
execute test_1 @param1 = '12,12', @param2 = '0',
@param3 = '0', @param4 = '0', @param5 = '0'
“In”关键字适用于“ID =”和“ID in”