2010-12-28 11 views
1

Hyありがとうございます!SQL Serverでコンマ区切り文字列を使用するにはどうすればいいですか

私たちは私たちのドメインにある種の配列を持っています。

例えば[ 123, 234, 345 ]

我々はSQL Serverに対してこれを照会しようとしているとき、我々は(文字列で置き換えます)のような何かを行うことができるように、我々は通常、123,234,345(文字列)に、この配列を変換:

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

パフォーマンス面ではWHERE [myColumn] = 123 OR ...の方が良い場合でも、これはかなり簡単です。

これは、ドメインからデータベースに配列を取得する唯一の方法です。

今、私は結合を行うために、この配列をテーブルに変換する必要があります。最初に私の頭に浮かんだのは、ドメイン内にXMLを作成し、これを何とか変換できるということでした。どのようにするか、あるいはより良い解決策を示す例を私に教えてもらえますか?

答えて

2

カンマ区切り文字列とparse into tableを使用できると確信しています。

しかし、私はこのようなIDを持つXMLを送ったことをお勧め:あなたが参加することができます解析した後

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 

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

そしてテーブルに解析するよりも。私はこのようなXMLビルダを使用して、サーバー側で

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(); 
     } 

} 

あなたが望むものをすることができますし、SQL Serverで簡単に解析するので、私は、XMLが好き。

+0

:)あなたのリンクは私を笑わせてくれました。それが私の質問にループバリアントを残してしまった理由です;)...はい - サーバー側が見逃されましたが、それは魔法を明らかにしました!ありがとう! –

+0

ようこそ。 –

+0

ROW_NUMBER ORDER BYの仕組みが混乱しています: -/ –

関連する問題