在表值函数中声明变量

esq*_*are 101 sql-server function user-defined-functions

如何在表值函数中声明变量?(比如我的头衔)

Mik*_*son 186

有两种表值函数.一个只是一个select语句,一个可以拥有更多行而不仅仅是一个select语句.

这不能有变量:

create function Func() returns table
as
return
select 10 as ColName
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

create function Func()
returns @T table(ColName int)
as
begin
  declare @Var int
  set @Var = 10
  insert into @T(ColName) values (@Var)
  return
end
Run Code Online (Sandbox Code Playgroud)

  • 第一个示例称为"内联表值函数",与多语句表值函数相比具有性能优势,即数据库服务器可以*将带有ITVF*内联*的查询重构为父查询,实质上变成了参数化的"VIEW",而MSTVF的行为更像是一个不透明的存储过程(虽然与sprocs相比具有自己的优势).内联函数应优先于MSTVF.如果确实需要计算和存储中间值(例如复杂标量函数表达式的结果),则使用子查询. (26认同)
  • 可能还值得一提的是,如果您用来填充您希望设置的变量的任何结果在任何方面都是通用的,那么您可以考虑编写一个单独的函数来生成它。这将允许您使用上面@Dai 描述的 ITVF 及其所有好处,同时仍将动态生成的值插入到您的函数中。我只是在上述解决方案的帮助下编写了一个函数(谢谢@MikaelEriksson!),该函数将其参数之一传递给辅助函数,以节省我必须使用 MSTVF 表单的时间。 (2认同)