SQL Server 2008 - How do i return a User-Defined Table Type from a Table-Valued Function?

后端 未结 4 1196
星月不相逢
星月不相逢 2020-11-29 10:14

Here\'s my user-defined table type...

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

This is what ive had to do in my table-valued f

相关标签:
4条回答
  • 2020-11-29 10:27

    Even though you can not return the UDTT from a function, you can return a table variable and receive it in a UDTT as long as the schema match. The following code is tested in SQL Server 2008 R2

    -- Create the UDTT

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

    -- Declare your variables

    DECLARE @uddt MyCustomUDDT;
    DECLARE @Modifieduddt MyCustomUDDT;
    

    // Call the function

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

    Function signature

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

    Hopefully this will help somebody.

    0 讨论(0)
  • 2020-11-29 10:27

    The syntax for CREATE FUNCTION indicates that the only way to define a table return type is by listing columns and types, a <table_type_definition>. Even SQL Server "Denali" has the same definition for <table_type_definition>. Although strangely, it's syntax doesn't include multi-statement Table valued functions, or anything else that references this fragment.

    0 讨论(0)
  • 2020-11-29 10:38

    Ok - so it cant be done.

    Easy enough to duplicate the table definition in the return type (with the use of scripting).

    Still - hopefully this issue gets rectified in the next version of SQL Server.

    0 讨论(0)
  • 2020-11-29 10:45

    I do not believe this is possible. You cannot use a UDTT as the return type of a Scalar-Valued Function because it is not a scalar value. You also cannot replace the table declaration of a Table-Valued Function with a UDTT. Repeating the table definition seems to be the only option. If we knew why you were doing this, perhaps we could find an alternative.

    0 讨论(0)
提交回复
热议问题