【问题标题】:SQL Server 2008: Can a multi-statement UDF return a UDT? [duplicate]SQL Server 2008:多语句 UDF 能否返回 UDT? [复制]
【发布时间】:2010-12-27 06:18:03
【问题描述】:

多语句 UDF 是否可能返回用户定义的表类型,而不是在其返回参数中定义的表?

所以而不是:

CREATE FUNCTION MyFunc 
(
    @p1 int, @p2 char
)
RETURNS 
@SomeVar TABLE 
(
    c1 int
)
AS

我想做:

CREATE FUNCTION MyFunc 
(
    @p1 int, @p2 char
)
RETURNS 
@SomeVar MyTableType
AS

原因是在我的函数内部我调用其他函数并且必须传入MyTableType UDT,即使我在RETURN表类型中定义完全相同的表定义,它也会抛出一个操作数冲突错误。

【问题讨论】:

    标签: sql-server tsql sql-server-2008 user-defined-functions user-defined-types


    【解决方案1】:

    我能想到的最好办法是在函数本地声明一个您类型的表变量,并在整个代码中使用它。然后在 RETURN 语句之前对参数表执行 INSERT...SELECT。

    到目前为止,我一直避免使用用户定义的类型。虽然它们看起来很有希望,能够在一个位置更改类型而不是在任何地方更改数据类型,但由于这些问题,它们似乎永远无法实现生产力和维护。

    【讨论】:

    • 我也考虑过这种解决方法,但只是希望我忽略了一些东西,而我想要的任何东西实际上都是可能的。我同意你对它们的看法,但对于这个特殊问题,我认为好处超过了丑陋的解决方法......
    • 不——这不可能。我最近问了这个问题。必须将 UDT 重新声明为 UDF 中的临时表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多