这是我的用户定义表类型...

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

这就是我在我的表值函数中必须做的才能返回类型:

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

基本上,IM必须在函数的返回语句中重新删除我的类型定义。是否有一种方法可以简单地声明返回语句中的类型?

我本来会认为这会有效:

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>. 。尽管奇怪的是,它的语法不包含多statement表的有价值函数,也不包括引用此片段的其他内容。

我认为这是不可能的。您不能将UDTT用作标量值函数的返回类型,因为它不是标量值。您也无法用UDTT替换表值函数的表声。重复表定义似乎是唯一的选择。如果我们知道您为什么这样做,也许我们可以找到另一种选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top