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 模拟元组。
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 模拟元组。