开发者

How do I work with a comma-separated-string in SQL Server

Hy there!

So we have some kind of array in our domain.

eg [ 123, 234, 345 ]

When we are going to query this against SQL Server, we usually transform this array to 123,234,345 (string), so that we can do something like (with string replace):

SELECT    *
FROM      [dbo].[myTable]
WHERE     [myColumn] IN (123,234,345)

This is pretty straight forward, even开发者_如何学运维 if a WHERE [myColumn] = 123 OR ... would be better when it comes to performance.

This (the way of transforming) is the only way to get the array from the domain to the database.

Now I need, to do a join, this array to be transformed to a table. The first thing which came to my mind was that I could create a XML inside the domain and transform this somehow. Can you give me any examples how to do so or even better solutions?


I am sure that you can use comma separate string and than parse into table.

But i suggest to sent xml with ids like this:

<query id="59bd6806-d28c-451a-8473-69f1432e46b2">
  <ids>
    <id>1</id>
  </ids>
</query>

And than parse into table:

CREATE FUNCTION [dbo].[GetQueryIdsTable] 
(   
    @query xml
)
RETURNS @ids TABLE (id INT, ItemOrder INT)
AS
BEGIN

    INSERT INTO @ids (ID, ItemOrder) SELECT Ids.Id.value('.','int'), ROW_NUMBER() OVER(ORDER BY ROWCOUNT_BIG()) AS ItemOrder

    FROM @query.nodes('/query/ids/id') as Ids(Id)   

    RETURN 
END

After parsing you can join.

On the server side i use Xml builder like this:

public class Query
{
    private List<string> Ids = new List<string>();

    public void AddId(Int32 id)
    {
        if (Ids.Contains(id.ToString()))
            return;

        Ids.Add(id.ToString());
    }

    public String ToXmlString()
      {
        var idsElement = new XElement("ids");

        foreach (var id in Ids)
        {
            idsElement.Add(new XElement("id", id));
        }


        XElement query = new XElement("query",
                new XAttribute("id", Guid.NewGuid().ToString()),
            idsElement
         );

        return query.ToString();
       }

}

I like xml because you can what you want and easy parse at sql server.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜