Multivalue Parameters with Stored Procedure

  • So I spent most of the dya searching for an answer, which I did find. As the title states, I was trying to find a method to pass multiple values to a SP.

    I found the following which works great when I have one parameter.

    CREATE PROCEDURE usp_UK_Products (@Product NVARCHAR(MAX))

    AS

    DECLARE @xml XML

    DECLARE @Productlist_table TABLE (Product NVARCHAR(15))

    SET @xml = N'<root><r>' + replace(@Product, ',', '</r><r>') + '</r></root>'

    INSERT INTO @Productlist_table

    SELECT c.value('.', 'nvarchar(15)')

    FROM @xml.nodes('//root/r') AS a(c)

    SELECT BugID, BugTitle, CompanyName, CurrentOwner, Product, ProblemArea

    FROM View_UK_TicketsDetails

    WHERE Product IN (SELECT Product FROM @Productlist_table)

    Like I said, this method works great when having only one parameter. However, I need help on to make it work when having multple parameters. I did some tweaking today by duplicating some of the code and renaming it, but it's a no go for me.

    Looking to add another parameter called CompanyName.

    Hopefully someone here can assist.

    Thanks!

  • DarthBurrito (12/6/2012)


    So I spent most of the dya searching for an answer, which I did find. As the title states, I was trying to find a method to pass multiple values to a SP.

    I found the following which works great when I have one parameter.

    CREATE PROCEDURE usp_UK_Products (@Product NVARCHAR(MAX))

    AS

    DECLARE @xml XML

    DECLARE @Productlist_table TABLE (Product NVARCHAR(15))

    SET @xml = N'<root><r>' + replace(@Product, ',', '</r><r>') + '</r></root>'

    INSERT INTO @Productlist_table

    SELECT c.value('.', 'nvarchar(15)')

    FROM @xml.nodes('//root/r') AS a(c)

    SELECT BugID, BugTitle, CompanyName, CurrentOwner, Product, ProblemArea

    FROM View_UK_TicketsDetails

    WHERE Product IN (SELECT Product FROM @Productlist_table)

    Like I said, this method works great when having only one parameter. However, I need help on to make it work when having multple parameters. I did some tweaking today by duplicating some of the code and renaming it, but it's a no go for me.

    Looking to add another parameter called CompanyName.

    Hopefully someone here can assist.

    Thanks!

    It looks like you are parsing a comma seperated list?? Have a look at Jeff Moden's Delimited Split 8k. (link in my signature) if you can post some sample data and the expected output of the split and function we here on the forum could probably help out a little more than a point in a good direction.

    i would also look at the EXISTS clause, Gail Shaw has a great write up on it here http://sqlinthewild.co.za/index.php/2009/08/17/exists-vs-in/


    For faster help in answering any problems Please read How to post data/code on a forum to get the best help - Jeff Moden[/url] for the best way to ask your question.

    For performance Issues see how we like them posted here: How to Post Performance Problems - Gail Shaw[/url]

    Need to Split some strings? Jeff Moden's DelimitedSplit8K[/url]
    Jeff Moden's Cross tab and Pivots Part 1[/url]
    Jeff Moden's Cross tab and Pivots Part 2[/url]

  • We are in the SQL 2008 forum right?

    You can try something like the following. It may not be perfect (can't test because I don't have the underlying View_UK_TicketsDetails table) but it should be pretty close.

    CREATE TYPE ProductListTable (Product NVARCHAR(15))

    GO

    CREATE PROCEDURE usp_UK_Products (@Product NVARCHAR(MAX))

    AS

    DECLARE @product

    AS ProductListTable

    SELECT BugID, BugTitle, CompanyName, CurrentOwner, Product, ProblemArea

    FROM View_UK_TicketsDetails

    WHERE Product IN (SELECT Product FROM @product)

    GO

    DECLARE @ProductList

    AS ProductListTable

    INSERT INTO @ProductList

    SELECT '101' UNION ALL SELECT '102' UNION ALL SELECT '102'

    EXECUTE usp_UK_Products @ProductList

    For more information on using Table Valued Parameters you can consult BOL: http://msdn.microsoft.com/en-us/library/bb510489(v=sql.105).aspx


    My mantra: No loops! No CURSORs! No RBAR! Hoo-uh![/I]

    My thought question: Have you ever been told that your query runs too fast?

    My advice:
    INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
    The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.

    Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
    Since random numbers are too important to be left to chance, let's generate some![/url]
    Learn to understand recursive CTEs by example.[/url]
    [url url=http://www.sqlservercentral.com/articles/St

  • Let me add that I'm using this SP for a SSRS report. As the code I provided stands, the SP has one parameter called Products. So the parameter accepts multiple values, I found the code I provided and tweaked it to what I need, which worked great for only one parameter.

    Now, I would like to add a second, maybe a third parameter. This is where I'm running into a wall.

  • DarthBurrito (12/7/2012)


    Let me add that I'm using this SP for a SSRS report. As the code I provided stands, the SP has one parameter called Products. So the parameter accepts multiple values, I found the code I provided and tweaked it to what I need, which worked great for only one parameter.

    Now, I would like to add a second, maybe a third parameter. This is where I'm running into a wall.

    Presumably I am misreading what you are asking for, but from what you have said:

    CREATE PROCEDURE usp_UK_Products

    (@Product NVARCHAR(MAX), @CompanyName NVarchar(500))

    as

    ...

    The absence of evidence is not evidence of absence
    - Martin Rees
    The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
    - Phil Parkin

  • You can pass as many parameters as you want in an XML parameter, including tables of data.

    The real key is being able to parse the XML parameter using the built-in XML functions.

    xml Data Type Methods

    http://technet.microsoft.com/en-us/library/ms190798.aspx

    Without knowing your XML schema, I can't offer much more help, but there are number of articles posted here and other places that may be helpful. Google is your friend.

  • DarthBurrito (12/7/2012)


    Let me add that I'm using this SP for a SSRS report. As the code I provided stands, the SP has one parameter called Products. So the parameter accepts multiple values, I found the code I provided and tweaked it to what I need, which worked great for only one parameter.

    Now, I would like to add a second, maybe a third parameter. This is where I'm running into a wall.

    SSRS provides a built-in capability to auto-expand the list of values:

    SELECT ...

    FROM ...

    WHERE

    column_name IN (@Products_Parameter)

    SSRS automatically properly explodes the multi-valued parameter to a valid IN list.

    SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".

Viewing 7 posts - 1 through 6 (of 6 total)

You must be logged in to reply to this topic. Login to reply