私はxml.nodes()
たala、テーブル値メソッドから大きな恩恵を受けることCLR UDTを持っている:SQL CLRのユーザー定義型にテーブル値の*メソッド*を作成することはできますか?
-- nodes() example, for reference:
declare @xml xml = '<id>1</id><id>2</id><id>5</id><id>10</id>'
select c.value('.','int') as id from @xml.nodes('/id') t (c)
私は私のUDTのために似た何かをしたい:
-- would return tuples (1, 4), (1, 5), (1, 6)....(1, 20)
declare @udt dbo.FancyType = '1.4:20'
select * from @udt.AsTable() t (c)
誰がどんな経験wを持っています/ この?どんな助けでも大歓迎です。私はいくつかのことを試したが、彼らはすべて失敗した。私はドキュメンテーションとサンプルを探して、見つけました。
はい、UDTをパラメータとして使用するテーブル値のUDFを作成できましたが、OOスタイルの単一の型にすべてをバンドルすることを望んでいました。
EDIT
ラッセルハートはthe documentation states that table-valued methods are not supportedを発見した、と(下記参照)、予想されるランタイムエラーを生成するために、私の構文を修正しました。
[SqlMethod(FillRowMethodName = "GetTable_FillRow", TableDefinition = "Id INT")]
public IEnumerable GetTable()
{
ArrayList resultCollection = new ArrayList();
resultCollection.Add(1);
resultCollection.Add(2);
resultCollection.Add(3);
return resultCollection;
}
public static void GetTable_FillRow(object tableResultObj, out SqlInt32 Id)
{
Id = (int)tableResultObj;
}
このビルドに成功展開:
はVS2010では、新しいUDTを作成した後、私は構造体定義の最後にこれを追加しました。しかし、その後、SSMSで、我々は(逐語をそうでない場合は)期待通りにランタイムエラーを取得:だから
-- needed to alias the column in the SELECT clause, rather than after the table alias.
declare @this dbo.tvm_example = ''
select t.[Id] as [ID] from @this.GetTable() as [t]
Msg 2715, Level 16, State 3, Line 2
Column, parameter, or variable #1: Cannot find data type dbo.tvm_example.
Parameter or variable '@this' has an invalid data type.
、後にすべての可能性ではないようです。可能であったとしても、SQL ServerのCLRオブジェクトの変更に制限があるため、おそらく賢明ではありません。
つまり、誰かがこの特定の制限を回避するためのハックを知っているならば、それに応じて新しい賞金を引き上げるつもりです。
ありがとうラス、はいそれは助けになります。 –