T-SQL调用table函数传递多个值并聚合结果
T-SQL call table function passing multiple values and aggregate results
我有一个 Table 函数,它 returns 一组基于参数的行,如下例所示:
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
我有另一个 table,其中包含 "Parent Ids" 的列表,我应该为匹配特定查询的每个 Parent_Id 调用上一个函数并汇总所有结果。
使用类似
的方法检索父 ID
SELECT Parent_Id
FROM Parent_Records
WHERE Country = 'USA'
这个selectreturns,比如4行。对于每一行,我必须执行我的函数 fn_get_records
并将所有结果汇总到一个视图或另一个函数中。
这可能吗?
当然我不想使用游标,因为我需要一些快速的东西
仅供参考:更高效的 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
我有一个 Table 函数,它 returns 一组基于参数的行,如下例所示:
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
我有另一个 table,其中包含 "Parent Ids" 的列表,我应该为匹配特定查询的每个 Parent_Id 调用上一个函数并汇总所有结果。
使用类似
的方法检索父 IDSELECT Parent_Id
FROM Parent_Records
WHERE Country = 'USA'
这个selectreturns,比如4行。对于每一行,我必须执行我的函数 fn_get_records
并将所有结果汇总到一个视图或另一个函数中。
这可能吗? 当然我不想使用游标,因为我需要一些快速的东西
仅供参考:更高效的 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