Sql server 传递多个值和聚合结果的T-SQL调用表函数

Sql server 传递多个值和聚合结果的T-SQL调用表函数,sql-server,aggregate-functions,table-functions,Sql Server,Aggregate Functions,Table Functions,我有一个Table函数,它根据一个参数返回一组行,如下例所示: CREATE FUNCTION fn_get_records (@PARENTID INT) RETURNS @returnTable TABLE ( -- columns returned by the function Id INT NOT NULL, Parent_Id INT NOT NULL, Name VARCHAR(255) NOT NULL ) AS BEGIN -- Thi

我有一个Table函数,它根据一个参数返回一组行,如下例所示:

CREATE FUNCTION fn_get_records
(@PARENTID INT)
RETURNS  @returnTable TABLE 
(
    -- columns returned by the function
    Id INT NOT NULL,
    Parent_Id INT NOT NULL,
    Name VARCHAR(255) NOT NULL
)
AS
BEGIN
   -- This select returns data
   INSERT INTO @returnTable (Id, ParentId, Name)
   SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID 
RETURN
END
我有另一个表,其中包含这些“父Id”的列表,我应该为匹配特定查询的每个父Id调用上一个函数,并聚合所有结果

父ID是通过以下方式检索的

SELECT Parent_Id 
FROM Parent_Records
WHERE Country = 'USA'
例如,此选择返回4行。对于每一行,我必须执行我的函数
fn\u get\u records
,并将所有结果聚集在一个视图或另一个函数中

有可能吗?
当然,我不想使用游标,因为我需要一些快速的东西,只是一个快速的提示:一个更有效的TVF将是一个单一的语句

CREATE FUNCTION fn_get_records (@PARENTID INT)
RETURNS TABLE 
AS
RETURN (
   SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID 
)
END
然后可以通过交叉应用调用函数。例如:

Select A.*
      ,B.*
 From  YourTable A
 Cross Apply dbo.fn_get_records (A.SomeIntValue) B

仅供参考:一个更有效的TVF将是一个单一的声明

CREATE FUNCTION fn_get_records (@PARENTID INT)
RETURNS TABLE 
AS
RETURN (
   SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID 
)
END
然后可以通过交叉应用调用函数。例如:

Select A.*
      ,B.*
 From  YourTable A
 Cross Apply dbo.fn_get_records (A.SomeIntValue) B

我想直到今天我才使用交叉申请声明-D@Raffaeu这是一个伟大的特点。将其视为记录级处理的子程序。谷歌交叉应用和外部应用。学习新东西总是很有趣。我想直到今天我才使用交叉应用语句-D@Raffaeu这是一个伟大的特点。将其视为记录级处理的子程序。谷歌交叉应用和外部应用。学习新东西总是很有趣的。