SQL Server 2008-テーブル値の関数からユーザー定義のテーブルタイプを返すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3089553

質問

これが私のユーザー定義のテーブルタイプです...

CREATE TYPE [dbo].[FooType] AS TABLE(
 [Bar] [INT],
)

これは、タイプを返すために私のテーブル値の関数で私がしなければならなかったことです。

CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN

基本的に、関数のreturnステートメントで私のタイプ定義を再告発する必要があります。 returnステートメントでタイプを単純に宣言する方法はありませんか?

私はこれがうまくいくと思っていただろう:

CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN

これに関してMSDN/Googleで助けが見つかりません....誰か?

編集

私は自分の答えをマークしませんでした、そして、この質問にぶつかりました - 私は6か月後に同じシナリオに遭遇したので。

テーブルの価値のある関数からユーザー定義のテーブルタイプを返すことができるかどうか、誰かが考えていますか?そうでない場合、私がやったこと以外により良い回避策はありますか? (もう一度タイプを再排除します)。

役に立ちましたか?

解決 2

わかりました、だからそれはできません。

返品タイプのテーブル定義を複製するのに十分簡単です(スクリプトを使用して)。

それでも - この問題がSQL Serverの次のバージョンで修正されることを願っています。

他のヒント

機能からUDTTを返すことはできませんが、テーブル変数を返してUDTTで受信できます スキーマが一致する限り. 。次のコードをテストします SQL Server 2008 R2

-UDTTを作成します

CREATE TYPE dbo.MyCustomUDDT AS TABLE
(
    FieldOne varchar (512),
    FieldTwo varchar(1024)
)

- 変数を宣言します

DECLARE @uddt MyCustomUDDT;
DECLARE @Modifieduddt MyCustomUDDT;

//関数を呼び出します

INSERT INTO @Modifieduddt SELECT * FROM dbo.MyUDF(@uddt);

関数の署名

CREATE FUNCTION dbo.MyUDF(@localUDDT MyCustomUDDT)
RETURNS @tableVar TABLE
(
    FieldOne varchar (512),
    FieldTwo varchar(1024)
)
AS
BEGIN
 --Modify your variable here
RETURN
END

うまくいけば、これが誰かを助けるでしょう。

の構文 関数を作成します テーブルリターンタイプを定義する唯一の方法は、列とタイプをリストすることであることを示します。 <table_type_definition>. 。平 SQL Server "Denali" 同じ定義があります <table_type_definition>. 。奇妙なことに、構文はマルチステートメントテーブルの価値のある関数、またはこのフラグメントを参照する他のものは含まれていません。

私はこれが可能だとは思わない。スカラー値ではないため、スカラー値関数のリターンタイプとしてUDTTを使用することはできません。また、テーブル値関数の表宣言をUDTTに置き換えることもできません。テーブル定義を繰り返すことが唯一のオプションのようです。なぜあなたがこれをしているのか知っていれば、おそらく代替手段を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top