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 值函数。
我想构建一个非常复杂的 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 值函数。