在我的存储过程中,我有很多列的表变量。因为我想简化存储过程,所以我认为我可以在函数中声明表变量,例如
CREATE FUNCTION [dbo].[ufn_DeclareMaterialTableVariable]
(
)
RETURNS @returntable TABLE
(
[Id] [int] NULL,
[Number] [int] NOT NULL,
[Name] [nvarchar](255) NULL,
... dozens of columns
)
AS
BEGIN
RETURN
END
但我意识到我不知道如何使用它。我的想法是
select *
into @table
from [dbo].[ufn_DeclareMaterialTableVariable]
但这行不通,除非我使用临时表。
第二个想法是声明具有自定义数据类型的表。
declare @table TABLE as CustomTableType
但这也行不通。任何想法 ?
您需要声明一个与 TVF 结果形状相同的表变量,然后使用
INSERT INTO
notSELECT INTO
,并记住在调用它时在函数名称的末尾添加方括号/括号,即Foo()
不仅仅是Foo
:如果您已经声明了一个表类型,那么声明该类型变量的语法如下(注意没有
TABLE
关键字);也就是说,令人讨厌的是,您不能将 TVF 的结果类型声明为表类型 - 即,您始终必须再次显式声明返回的列 - 这首先部分否定了自定义类型的点,在这个情况。