Sql server 在表值函数中声明变量

Sql server 在表值函数中声明变量,sql-server,function,user-defined-functions,Sql Server,Function,User Defined Functions,如何在表值函数中声明变量?(就像在我的标题中一样)有两种表值函数。一个是select语句,另一个是可以有比select语句更多行的语句 这不能有一个变量: create function Func() returns table as return select 10 as ColName 您必须这样做: create function Func() returns @T table(ColName int) as begin declare @Var int set @Var = 1

如何在表值函数中声明变量?(就像在我的标题中一样)

有两种表值函数。一个是select语句,另一个是可以有比select语句更多行的语句

这不能有一个变量:

create function Func() returns table
as
return
select 10 as ColName
您必须这样做:

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

内联语句还是多语句?与MSDN描述的一样?第一个示例称为“内联表值函数”,与多语句表值函数相比,它具有性能优势,即数据库服务器可以重新组合查询,并将ITVF内联到父查询中,基本上成为一个参数化的
视图
,而MSTVF的行为更像一个不透明的存储过程(尽管与存储过程相比有其自身的优势)。内联函数应优先于MSTVF。如果确实需要计算和存储中间值(例如复杂标量函数表达式的结果),则使用子查询。可能还值得一提的是,如果用于填充要设置的变量的结果在任何方面都是通用的,然后你可以考虑编写一个单独的函数来生成它。这将允许您使用上面@Dai所描述的ITVF,同时将动态生成的值插入到您的函数中。我刚刚在上述解决方案的帮助下编写了一个函数(谢谢@MikaelEriksson!)它将它的一个参数传递给一个helper函数,以避免我不得不使用MSTVF表单。最大的代价是为我的函数插入,我不知道如何跳过这个代价,而不插入到表变量并返回select@naughtilus如果能看到这样一个例子,那就太好了。你是否考虑过在提出建议的同时提供另一个答案?