I want to write a SQL Server 2005 stored procedure which will select and return the user records from the user table for some userids which are passed to the stored procedure as parameter.
How to do this ?
I can pass the user ids as a string separated by comma. So that I can use the
select *
from users
where userid in (userids)
E.g. : I want to select records for id's 5,6,7,8,9
How to write the stored procedure ?
Assuming T-SQL, you can use this nice function (that returns a table).
In this way:
You can change the stored function to work with comma separated strings instead of space separated ones.
If you don't want / can't use a stored function you can include the code of it inside the stored procedure where needed.
EDIT: this is incredibly more performant than the string concatenation.
You can also use Find_IN_SET instead of IN. See the query below
see my previous answer to this
this is the best source:
http://www.sommarskog.se/arrays-in-sql.html
create a split function, and use it like:
I prefer the number table approach
For this method to work, you need to do this one time table setup:
Once the Numbers table is set up, create this function:
You can now easily split a CSV string into a table and join on it:
OUTPUT:
Your can pass in a CSV string into a procedure and process only rows for the given IDs:
For SQL Server 2005, check out Erland Sommarskog's excellent Arrays and Lists in SQL Server 2005 article which shows some techniques how to deal with lists and arrays in SQL Server 2005 (he also has another article for SQL Server 2000).
If you could upgrade to SQL Server 2008, you can use the new feature called "table valued parameter":
First, create a user-defined table type
Secondly, use that table type in your stored procedure as a parameter:
See details here.
Marc
Just use it like this will work
try this this works for me