|
hi i need to write a stored proc in which user should be able to pass multiple values for one parameter but for each value the stored proc should return a separate data set. for eg suppose the query in the proc sp_emp is select * from emp where emp in @emp now when user executes the proc like exec sp_emp 1,2,3,4,5,6 the stored proc shoulld return 6 different data sets for each of the emp value. Thanks
(comments are locked)
|
|
This solution contains a Split-function which is "stolen" from Jeff Modens article at SQL Server Central: http://www.sqlservercentral.com/articles/Tally+Table/72993/ Here's the function code: And here's how to use it in a stored procedure to get a result set for each input-parameter in a comma-separated string. Just adding one thing: Be careful with what you pass to the stored procedure now that it uses dynamic SQL.
Oct 31 '11 at 10:10 AM
Magnus Ahlkvist
(comments are locked)
|
|
The first question that springs to mind is 'Why?'. You can do this, but I wouldn't recommend doing it this way... You would have a wrapper proc that serves 2 purposes: 1- to split the input parameter into individual But really....... Because each result set (of one row) is going to be identical in terms of the columns, why not have the data returned as one result set, and have the calling application either handled it that way, or, if you must, split it into multiple result sets in it's domain. thanks for going through it Kev. for your question why, i just want to know the code to write a stored proc which can give multiple data sets on execution where the number of data sets depends on the number of values of the parameter. the actual requirement is much more complex then just a simple select statement. i guess it will require looping but i am not exactly sure how and i am in too much hurry to ponder over it for too long :|
Oct 31 '11 at 09:16 AM
NAmola
I would seriously reconsider your design then. No kidding.
Oct 31 '11 at 09:19 AM
Kev Riley ♦♦
its hard to explain, but let me try. we need number of male and female employees for each ethnicity in each job category for each location in an organization. and we need to put it in a crystal report. now client wants that wen he selects multiple locations, he should have both options 1) of getting a consolidated report for all locations and 2) a different report for each location. we are unable to handle this at report level so we decided to handle this at query level. if we can get a separate data set for each location value, we can get a different report for it. getting the consolidated data set is not a problem as that is how a stored proc normally works. bt getting a different data set is a problem :/ so now if i was able to explain u, can u plz help? :)
Oct 31 '11 at 09:31 AM
NAmola
I might not be understanding this correctly, but if there is a requirement for a different report per location, then I would have a different proc per location. However you have said that you want the same proc to be called but with different parameters - which brings it back round to being the same 'shape' of data for each location. If you can handle having a report definition for each data set in the proc output, why not simply have a report definition for 'filtered' data. I'm not a Crystal Reports expert, but I'm sure you can filter the datasource. How would you determine if the call to the proc returns 1, 2, 5, 10, 100 record sets?
Oct 31 '11 at 09:48 AM
Kev Riley ♦♦
(comments are locked)
|

