2017-01-11 9 views
0

CLRを呼び出してテーブルを返すストアドプロシージャがあります。現在、1つの文字列を受け付けていますが、複数の配列を受け入れるように配列を更新したいと思います。CLR関数で複数の文字列を受け入れる

は現在、C#関数は次のようになります。

string[]にパラメータを変更しようとしてい
public static IEnumerable ParseData(System.String data){ ... } 

System.String[]IEnumerable、およびArrayListすべてが失敗しています。これらのいずれかで構築しようとすると、それがどのような私はつもりはそうのようなSQLで私の関数を呼び出すことができるようにすることです、それは重要な場合

CREATE FUNCTION [dbo].[ParseData] (@data /* Error: Unsupported type. */) 

にgenerated.sqlファイルを変更します。

SELECT * FROM clr_parseData((SELECT TOP 10 value FROM table)) 
+1

のように設定されたデータが生成されますパラメータ(クエリの構文がすべて間違っています)。しかし、CLRはデータセット全体を渡すことをサポートしていません。区切られたリストを渡すことはできますが、あなたが試みているようにコレクションを渡すことはできません。 –

+0

@SeanLange私は答えになると感じました。私は別の方法を見つけなければならないだろうと思います。 –

+0

あなたのParseDataメソッドは何をしますか?つまり、配列を指定すると、配列内の各要素に対して同じことが行われますか?そうであれば、それはスカラー関数であるかテーブル関数であるかに応じて、選択リストまたはクロス適用(それぞれ)で呼び出すことができるCLR関数のように聞こえます。 –

答えて

1

コメントに基づいて、System.String(単数ではなく配列)の署名を持つ既存の関数を使用できます。あなたはこのようにそれを何かをしたい:ここ

select * 
from (
    values 
     ('foo,bar'), 
     ('bar,baz') 
) as a(v) 
cross apply dbo.ParseData(a.v) as p 

は、テーブル値コンストラクタはちょうど私がデータのセットを生成するための短い方法として機能します。 SQLは、セット内の各値に対して関数を適用し、データセットを生成します。 dbo.ParseDataは、「CSVを解析」のような単純な何かをすると仮定すると(それはそれは私の例でやるものだ!)、前回のクエリはあなたが大切なテーブルを考えているサウンド

foo,bar foo 
foo,bar bar 
bar,baz bar 
bar,baz baz 
関連する問題