SQL Server 2008-テーブル値の関数からユーザー定義のテーブルタイプを返すにはどうすればよいですか?
質問
これが私のユーザー定義のテーブルタイプです...
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に置き換えることもできません。テーブル定義を繰り返すことが唯一のオプションのようです。なぜあなたがこれをしているのか知っていれば、おそらく代替手段を見つけることができます。