In SQL Server, if you pass a comma separated list as a variable in IN Clause in T-SQL, it would not give error but you will not even get expected result either.
In this article, we will see how to overcome this with example
Let's first see the problem encountered while using variable in "IN" clause.
First create a table with some sample data,
- create table tbldata
- (
- id int, name varchar(50)
- )
- insert into tbldata
- select 1, 'Sandeep' union all
- select 2, 'Abhay' union all
- select 3, 'Ritesh'
Now, let's execute the below queries with and without variable in "IN" clause.
OUTPUT

Here, we get the result as expected, now let's execute query with variable,
OUTPUT

See here when we execute the same query with variable, we did not get the expected output. Hence, it is concluded that variable does not work fine when used inside "IN" clause in Sql Server.
Now, let’s see the work around to this problem. There are two solutions to handle the same,
- select * from tbldata where name in ('Sandeep', 'Abhay')

Here, we get the result as expected, now let's execute query with variable,
- declare @idList varchar(max)
- set @idList = '''Sandeep'', ''Abhay'''
- select * from tbldata where name in (@idList)

See here when we execute the same query with variable, we did not get the expected output. Hence, it is concluded that variable does not work fine when used inside "IN" clause in Sql Server.
Now, let’s see the work around to this problem. There are two solutions to handle the same,
Ankur MistryPosted Dec 1, 2015, 12:54 AM
Nice