Click here to Skip to main content
15,920,217 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I want to pass comma separated values to a parameter variable in sql server.

Currently getting values as

@test='ab','bc','cd'. But when passing this parameter variable in IN clause of where condition it is not working.

What I have tried:

  declare
 @ChannelTypeXml xml,
 @TransactionTypeXml xml
 
 
 SET @ChannelTypeXml='<ROOT><CHANNELTYPE><CHANNEL>FGBO</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>IB</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>Manual Upload - FGB</CHANNEL></CHANNELTYPE></ROOT>'
 
 
 --select @TransactionTypeXml = FileType                                                                    
 --from   USERS                                                                                                         
 --where
 --UserId= 'bm'
 --and
 --Role='BM'                                                                                      
 --AND  IsDeleted=0  
 
 
 select @ChannelTypeXml
 
declare @ChannelTypeValues varchar(4000)
select @ChannelTypeValues = ''
 
SELECT @ChannelTypeValues = @ChannelTypeValues +  ''''+ t.c.value('CHANNEL[1]','varchar(100)') +'''' + ','
FROM   @ChannelTypeXml.nodes('//ROOT/CHANNELTYPE') T(c)
 
select @ChannelTypeValues = substring(@ChannelTypeValues,1,len(@ChannelTypeValues)-1)
 
select @ChannelTypeValues
Posted
Updated 30-Nov-17 8:01am
v2
Comments
Bryian Tan 30-Nov-17 13:43pm    
Where in the code is using the IN clause?

Ok. This is my assumption based on what being posted here. The current query is returning @ChannelTypeValues = 'FGBO','IB','Manual Upload - FGB'? And the next invisible/secret query will use that variable as a filter? [SELECT * FROM SECRETTable WHERE secretColumn IN @ChannelTypeValues ]???

Here how the query can accomplish the above scenario.

SQL
DECLARE @ChannelTypeXml xml

DECLARE @tempChannelType TABLE (ChannelType VARCHAR(50))
DECLARE @tempDummy TABLE (Column1 VARCHAR(50), ChannelType VARCHAR(50))

 SET @ChannelTypeXml='<ROOT><CHANNELTYPE><CHANNEL>FGBO</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>IB</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>Manual Upload - FGB</CHANNEL></CHANNELTYPE></ROOT>'

 --dummy table
INSERT INTO @tempDummy
	SELECT 'abcd','FGBO' UNION
	SELECT 'xyz','IB' UNION
	SELECT 'Kitty','CAT' UNION
	SELECT 'hijk','Manual Upload - FGB' UNION
	SELECT 'Woof Woof','DOG';

--get the channel 
INSERT INTO @tempChannelType
	SELECT t.c.value('CHANNEL[1]','varchar(100)') 
	FROM   @ChannelTypeXml.nodes('//ROOT/CHANNELTYPE') T(c)

SELECT * FROM @tempChannelType
SELECT * FROM @tempDummy WHERE ChannelType IN (SELECT * FROM @tempChannelType)

Place the channelvalue extracted from XML into a temporary table
ChannelType
FGBO
IB
Manual Upload - FGB

Apply the filter results
Column1	ChannelType
abcd	FGBO
hijk	Manual Upload - FGB
xyz	    IB
 
Share this answer
 
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900