你必须要表函数。 一个是
select * from [dbo].[GetMembersofGroupPolicy](21929,getdate())
此函数返回一个表,其中一列名为EntityID。 我需要的是执行我的第二个表函数
select * from dbo.GetFamilyMembers(EntityID)
对于每个EntityID,我将得到第一个表的结果。 我试过的是
SELECT F.ParentID, F.Relation, GM.ID_SYMBOLAIOY, GM.TIN,
GM.[LastName Native],
GM.[FirstName Native],
GM.[LastName Eng],
GM.[FirstName Eng],
GM.DOB,
GM.EntryDate,
GM.EntityID,
GM.TerminationDate,
GM.isActive
FROM
dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM
LEFT OUTER JOIN
(SELECT id_ypokat, ParentID, prnt, id_ontot_child, Relation
FROMdbo.GetFamilyMembers(GM.EntityID) AS GetFamilyMembers_1) AS F
ON GM.EntityID = F.id_ontot_child
但是我收到一条错误,即无法绑定entityID。
有人可以帮我编辑此查询吗?
答案 0 :(得分:0)
您不能将行的值作为派生表的一部分传递。你需要使用APPLY。
SELECT F.ParentID
, F.Relation
, GM.ID_SYMBOLAIOY
, GM.TIN
, GM. [LastName Native]
, GM.[FirstName Native]
, GM.[LastName Eng]
, GM.[FirstName Eng]
, GM.DOB
, GM.EntryDate
, GM.EntityID
, GM.TerminationDate
, GM.isActive
FROM dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM
cross apply dbo.GetFamilyMembers(GM.EntityID) AS F
where GM.EntityID = F.id_ontot_child
Paul White在APPLY上有一篇很棒的2篇系列文章。
http://www.sqlservercentral.com/articles/APPLY/69953/
http://www.sqlservercentral.com/articles/APPLY/69954/
确保您在这里确实拥有内联表值函数。如果存在多个查询,则性能可能会受到严重影响。
答案 1 :(得分:0)
SELECT *
FROM [dbo].GetMembersofGroupPolicy(21929, GETDATE()) AS GM
outer apply dbo.GetFamilyMembers(GM.EntityID) as F
如果要模仿内部联接行为,请使用“交叉应用”。
答案 2 :(得分:0)
看起来你需要SQL中的APPLY和CROSS APPLY函数:
APPLY运算符允许您为查询的外表表达式返回的每一行调用表值函数。表值函数用作右输入,外表表达用作左输入。从左输入的每一行评估右输入,并将生成的行组合起来用于最终输出。 APPLY运算符生成的列的列表是左输入中的列集,后跟右输入返回的列列表。
https://technet.microsoft.com/en-us/library/ms175156(v=sql.105).aspx
SELECT F.ParentID, F.Relation, GM.ID_SYMBOLAIOY, GM.TIN,
GM.[LastName Native],
GM.[FirstName Native],
GM.[LastName Eng],
GM.[FirstName Eng],
GM.DOB,
GM.EntryDate,
GM.EntityID,
GM.TerminationDate,
GM.isActive
FROM
dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM
OUTER APPLY
(SELECT id_ypokat, ParentID, prnt, id_ontot_child, Relation
FROMdbo.GetFamilyMembers(GM.EntityID)) AS F
希望这有助于或至少让您走上正确的轨道