sql server - Concatenated string as parameter argument value does not give output in stored procedure -
i using sql server 2008 management studio.
have stored procedure accepts several parameters.
1 parameter name @recvemail default value 'b'.
if value of @recvemail 'y' users opted email news letter should displayed in output.
if @recvemail 'n' users not wish receive email letter should included in output.
if value 'b' users should displayed in output, whether opted news letter or not opted news letter.
now default value 'b' tried set parameter argument values 'y', 'n' not getting output.
my stored proc
create procedure [dbo].[proc_getmembershipemailbackup] -- exec proc_getmembershipemail @from=n'1991-06-11',@to=n'2017-06-14',@devoteename=n'',@membershipname=n'membership life',@log_cond=n'',@recvemail=n'n' @from varchar(10), @to varchar(10), @devoteename varchar(60)='', @membershipname varchar(100)='all', @email varchar(50)= '', @phoneno varchar(50)= '', @minamount decimal =null, @maxamount decimal =null, @log_cond varchar(5), @recvemail char(61)='b' begin if @recvemail = 'b' begin set @recvemail='y' + ',' + 'n' end end begin if @membershipname = 'all' begin set @membershipname='' end end begin select row_number() on (order mu.f_name) [no], mu.f_name +' '+mu.l_name devoteename , mu.pers_email email, mu.home_phone phoneno, mp.name membershipname, mu.recv_email optedforemail, d1.memb_id , d1.amt_due amount_due, convert(varchar(10),d1.nextduedate,101) duedate, d1.pay_term d_user_memb d1 left join m_user mu on d1.user_id = mu.user_id left join m_memb_pledge mp on d1.memb_id = mp.memb_id d1.status in ('a','d','c') and(isnull(@from,'') = '' or convert(date,d1.nextduedate ) >= convert(date,@from) ) , (isnull(@to,'') = '' or convert(date,d1.nextduedate ) <= convert(date,@to )) , (isnull(@devoteename,'') = '' or (f_name +' '+l_name) '%' + @devoteename + '%') , (recv_email in (@recvemail ) ) , (isnull(@membershipname,'') = '' or (mp.name) = @membershipname) , (isnull (@email, '') = '' or mu.pers_email = @email) , (isnull (@phoneno, '') = '' or mu.home_phone = @phoneno) --and (isnull (@minamount,0) = 0 or cast(d1.amt_due decimal(10,2)) >=@minamount) --and (isnull (@maxamount, 0) =0 or cast(d1.amt_due decimal(10,2)) <= @maxamount) , d1.amt_due<>0 , mu.status='a' , ( ( @log_cond = 'b' , d1.amt_due between @minamount , @maxamount ) or ( @log_cond <> 'b' , @log_cond <> '0' , ( isnull(@log_cond,'')='' or (@log_cond = '>' , d1.amt_due > @minamount) or (@log_cond = '<' , d1.amt_due < @minamount) or (@log_cond = '>=' , d1.amt_due >= @minamount) or (@log_cond = '<=' , d1.amt_due <= @minamount) or (@log_cond='=' , d1.amt_due =@minamount) ) ) or ( isnull(@log_cond,'')='0' ) ) end i tried execute procedure values not getting output
use chtlive go exec proc_getmembershipemailbackup @from=n'1800-06-11',@to=n'2099-06-14',@devoteename=n'',@log_cond='', @recvemail='b' if change parameter value @recvemail 'b' 'y', getting output correctly , users opted email letter displayed correctly in output.
changed value 'b' 'n' getting output correctly , users have not opted email letter displayed in output.
value 'b' not getting output. should output such users have either opted or not opted email letter should present in output.
as mark sinkinson wrote in his comment, in() operator expects comma separated list of arguments, have supplied single argument contains comma separated list of values.
change part of stored procedure:
and (recv_email in (@recvemail ) ) to this:
and (recv_email = @recvemail or @recvemail = 'b')
Comments
Post a Comment