Table,SQL 服务器中的行值 UDF

Table, Row valued UDFs in SQL Server

SQL 服务器(和其他一些数据库)支持 Table-value function。是否存在诸如行值函数之类的东西——其中基于一组输入值,将返回特定行,或者是否不支持该类型的函数类型。如果不支持,为什么不支持?

服务器给出的例子SQL是:

CREATE FUNCTION ProductsCostingMoreThan(@cost money)  
RETURNS TABLE  
AS  
RETURN  
    SELECT ProductID, UnitPrice  
    FROM Products  
    WHERE UnitPrice > @cost  

所以行值函数可能看起来像(我想):

CREATE FUNCTION GetCalculatedRow(@pk)
RETURNS ROW
AS
RETURN
    SELECT * FROM Products
    WHERE id=@pk

也许这没有意义(因为很容易有不同的行形状),但我很好奇是否支持这种类型的东西?我想它相当于一个相关的子查询,所以它可能有用(或者至少方便)。

SQL服务器有两种功能:

  • 标量函数 return 单个值(即“标量”)
  • Table 值函数 return 多行或多个值。

您所描述的只是 table 值函数的一个变体,它 return 正好是一行(或者可能没有行,这在您的示例中是可能的)。

您可以调用这样的函数:

select . . .
from t outer apply
     dbo.rowfunc( . . . )

或者:

select *
from t left join
     dbo.rowfunc ( . . . )
     on 1=1

或者:

select *
from db.rowfunc( . . . )

前两个 return 值,即使没有行被 returned。第三个没有这种可能性(很容易)。

请注意,某些数据库支持“元组”,这就是(我猜)您所说的“行”的意思——单个“标量”值中的多个列。 SQL服务器不是其中之一。

但是,如果您想 return 多个值,可以使用 JSON 或 XML 模拟元组。