Table_valued 具有隐式输出的函数

Table_valued function with Implicit output

我想构建一个非常复杂的 Table_valued 函数 (TVF),它将 return 非固定输出结构。

有时 TVF 可能 return 2 列,有时可能 return 只有 1 列。

我找不到执行此操作的方法,因为数据库引擎需要显式输出 table 结构,如:

RETURNS @returnTable 
TABLE 
(   
      column1 numeric,
      column2 numeric
)

一旦我找到上述问题的解决方案,我想做类似的事情:

SELECT 
 *
INTO #tmp
FROM MyTVF 

我知道可以使用存储过程来实现它,但我将面临另一个问题。通过使用存储过程,如果不显式声明输出,我将无法将结果保存到临时 table。

这是我想做的一个镜头示例:

CREATE FUNCTION [dbo].myFunction (@type int)
RETURNS @table TABLE 
( 
    Column1 int,
    Column2 int

)
AS 
BEGIN


    IF @type=1 
    BEGIN
        INSERT INTO @table
        SELECT 1 AS Column1, 2 AS Column2
    END
    ELSE
    BEGIN
        INSERT INTO @table
        SELECT 1 AS OnlyOneColumn
    END

RETURN
END
GO

SELECT * INTO #tmp1 FROM myFunction(1)
SELECT * FROM #tmp1

所有 Table 值函数 return 具有固定结构的 table。

但是(与多语句 Table 值函数不同),您不必为内联 Table 值函数声明该结构,例如:

CREATE FUNCTION MyFunction(@MyParameter INT)
RETURNS TABLE AS RETURN
SELECT * FROM SomeTable
WHERE SomeColumn=@MyParameter

此函数仍将 return 固定数量的列:即使您稍后将列添加到 SomeTable,它们也不会被 MyFunction return 编辑,除非函数被修改或刷新(sp_refreshsqlmodule)。

您不能创建 return 列数可变(取决于输入参数)的 Table 值函数。