Using a comma-separated parameter in an IN clause
Try this one, Just need to add commas at the beginning and at the end of @params string.
Declare @params varchar(100) Set @params = ',param1,param2,param3,'Select * from twhere CHARINDEX(','+cast(col1 as varchar(8000))+',', @params) > 0
you can use split function and use it as in following wayhere my split fnSplitString return splitdata
select * from tb1 where id in(select splitdata from dbo.fnSplitString((select col1 from tb12 where id=3),','))create FUNCTION [dbo].[fnSplitString] ( @string NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @output TABLE(splitdata NVARCHAR(MAX) ) BEGIN DECLARE @start INT, @end INT SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) WHILE @start < LEN(@string) + 1 BEGIN IF @end = 0 SET @end = LEN(@string) + 1 INSERT INTO @output(splitdata) VALUES(SUBSTRING(@string, @start, @end - @start)) SET @start = @end + 1 SET @end = CHARINDEX(@delimiter, @string, @start) END RETURN END
If you are using SQL 2016 and above string_split
you can use.
-- @param is where you keep your comma separated values example: declare @param = 'param1,param2,param3'select * from table1 where col1 in (select TRIM(value) from string_split(@param,',')
More information about string_split check offical documemt
Furthermore, TRIM()
is used to trim values from white spaces.