0

我有一个 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”的列表,我应该为每个匹配特定查询的 Parent_Id 调用上一个函数并聚合所有结果。

使用类似的东西检索父ID

SELECT Parent_Id 
FROM Parent_Records
WHERE Country = 'USA'

例如,此选择返回 4 行。对于每一行,我必须执行我的函数fn_get_records并将所有结果汇总到一个视图或另一个函数中。

甚至可能吗?当然我不想使用游标,因为我需要一些快速的东西

4

1 回答 1

2

仅供参考:更有效的 TVF 将是单个语句

CREATE FUNCTION fn_get_records (@PARENTID INT)
RETURNS TABLE 
AS
RETURN (
   SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID 
)
END

然后您可以通过 CROSS Apply 调用您的函数。例如:

Select A.*
      ,B.*
 From  YourTable A
 Cross Apply dbo.fn_get_records (A.SomeIntValue) B
于 2016-12-01T12:31:04.093 回答