Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何迭代CTE结果_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql server 如何迭代CTE结果

Sql server 如何迭代CTE结果,sql-server,sql-server-2014,Sql Server,Sql Server 2014,上述查询在我的存储过程中运行良好。但它将返回许多行,因此我想迭代所有行,并使用MemberGroupID调用另一个存储过程 如何执行此操作?根据请求,但不知道您的SP做了什么/返回了什么: 将交叉申请视为一个子程序 示例1: WITH cte AS ( SELECT MemberGroupID FROM [dbo].[RoleMembers] WITH(NOLOCK) WHERE RoleDefID = 1 ) SELECT * FROM cte 示例2: 下面将按

上述查询在我的存储过程中运行良好。但它将返回许多行,因此我想迭代所有行,并使用
MemberGroupID
调用另一个存储过程


如何执行此操作?

根据请求,但不知道您的SP做了什么/返回了什么:

将交叉申请视为一个子程序

示例1:

WITH cte AS
(
    SELECT MemberGroupID 
    FROM [dbo].[RoleMembers] WITH(NOLOCK) 
    WHERE RoleDefID = 1
)
SELECT * FROM cte
示例2:

下面将按ID拆分并取消分隔字符串

Select A.MemberGroupID 
      ,B.*
 From  [dbo].[RoleMembers] A
 Cross Apply [dbo].[fn_GroupMembers_HasMembershipe](1, A.MemberGroupID )  B
 WHERE RoleDefID = 1

这是在SQLServer2014中使用交叉应用的方法使用for循环和用户查询我不想使用游标或for循环。我想使用CTEsp实现什么?它可能是TVF吗?递归cte也是一个循环。。。您可能需要重写您的ptocedure以接受表值参数,而不是使用循环。如果要为每个MemberGroupID调用另一个SP,则不能在CTE中执行此操作,而只能使用循环。Jhon my tvf返回位value@VaibhavBhatia示例2演示了可以在交叉应用程序中进行查询,并返回单个或多个查询多记录/values@jhon我收到错误“无效的对象名'dbo.fn\u GroupMembers\u HasMembershipe'。当我简单调用函数,即选择dbo.fn\u GroupMembers\u HasMembershipe(1,6)时,它将返回正确的值result@VaibhavBhatia您能否自行调用函数Select*from dbo.fn\u GroupMembers\u HasMembershipe(anyPrameters)@jhon:是的……我调用了类似“Select dbo.fn\u GroupMembers\u HasMembershipe(1,6)”的函数,它提供了正确的结果,所以函数不是表值函数,而是标量值函数。十字架不会适用necessary@jhon有没有可能我可以一个接一个地得到值,这样我就可以应用过滤器或任何逻辑。我要做的是发送MemberGroupID,我的函数返回'true'或'false'。如果它返回false,我将发送另一个MemberGroupID;如果它返回true,我将破坏它并返回true。不使用游标是否可能?您需要编辑问题并提供一些示例数据和/或用例。这可能需要也可能不需要光标。
Declare @YourTable table (ID int, Value varchar(max))
Insert Into @YourTable values
(1,'New York;Albany;Providence'),
(2,'Atlanta;Kinderhook')

Select A.ID
      ,B.*
 From @YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace((Select replace(A.Value,';','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
              ) B
ID  RetSeq  RetVal
1   1       New York
1   2       Albany
1   3       Providence
2   1       Atlanta
2   2       Kinderhook
Select B.*, A.MemberGroupID
From  [dbo].[RoleMembers] A
CROSS APPLY (Select db =  dbo.fn_GroupMembers_HasMembershipe(A.MemberGroupID,6))  B
WHERE RoleDefID = 1