Today I am going to explain How to use Dynamic
sql query using “IN” keyword.
It is very easy to use IN query normally. But when you use IN in dynamic sql
query. Its bit typical to use . I am writing down some queries for table
creation and data insertion.
Create table #TBL_PINDETAILS
(
PinCode varchar(6),
AreaCovered varchar(500)
)
Insert Into #TBL_PINDETAILS values('110001','New Delhi HO, Shastri Bhawan')
Insert Into #TBL_PINDETAILS values('110002','Indraprastha HPO, Ajmeri Gate Extn')
Insert Into #TBL_PINDETAILS values('110003','C G O Complex, Delhi High Court')
Insert
Into #TBL_PINDETAILS
values('110004','Rashtrapati
Bhawan')
If you run normal IN query
select
* from #TBL_PINDETAILS
where Pincode in('110001','110002','110003')
Result
| 110001 | New Delhi HO, Shastri Bhawan |
| 110002 | Indraprastha HPO, Ajmeri Gate Extn |
| 110003 | C G O Complex, Delhi High Court |
It gives proper result. Now, suppose I want to use above query with stored
procedure and pass pincodes through parameter.
If you run IN using parameter-
declare @Query varchar(max)
declare @Param varchar(max)
set @Param='110001,110002'
Set @Query=(select * from #TBL_PINDETAILS where Pincode in(@Param))
select
(@Query)
Result- NULL
Sql server doesnot understand @param as '110001,110002'
In this condition you have to make @Query dynamic .Like -
declare @Query varchar(max)
declare @Param varchar(max)
set @Param='''110001'',''110002'''
Set @Query='(select * from #TBL_PINDETAILS where Pincode in('+@Param+'))'
select
(@Query)
Now it gives proper query-
(select * from #TBL_PINDETAILS where Pincode in('110001','110002'))
Result
| 110001 | New Delhi HO, Shastri Bhawan |
| 110002 | Indraprastha HPO, Ajmeri Gate Extn |
If there is any mistake in above concept please let me know in comments.

Join the conversation! Your thoughts help the community grow.