WITH cte AS
(
SELECT MemberGroupID
FROM [dbo].[RoleMembers] WITH(NOLOCK)
WHERE RoleDefID = 1
)
SELECT * FROM cte
上述查詢在我的存儲過程中正常工作。但它會返回很多行,所以我想迭代所有行並使用MemberGroupID
來調用另一個存儲過程。如何迭代CTE結果
我該怎麼做?
WITH cte AS
(
SELECT MemberGroupID
FROM [dbo].[RoleMembers] WITH(NOLOCK)
WHERE RoleDefID = 1
)
SELECT * FROM cte
上述查詢在我的存儲過程中正常工作。但它會返回很多行,所以我想迭代所有行並使用MemberGroupID
來調用另一個存儲過程。如何迭代CTE結果
我該怎麼做?
按照要求,不知道你的SP做什麼/回:
交叉的思考APPLY像一個子程序
例1:
Select A.MemberGroupID
,B.*
From [dbo].[RoleMembers] A
Cross Apply [dbo].[fn_GroupMembers_HasMembershipe](1, A.MemberGroupID) B
WHERE RoleDefID = 1
例2 :
以下內容將按ID拆分並取消分隔的字符串
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
Jhon我的tvf返回BIT值 –
@VaibhavBhatia然後例1應該做的竅門 –
@VaibhavBhatia例2是爲了證明你可以在CROSS APPLY並返回一個或多個記錄/值 –
Select B.*, A.MemberGroupID
From [dbo].[RoleMembers] A
CROSS APPLY (Select db = dbo.fn_GroupMembers_HasMembershipe(A.MemberGroupID,6)) B
WHERE RoleDefID = 1
這個使用十字sqlserver的應用方式2014
所以函數不是一個表值函數,而是一個標量值函數。交叉申請將不是必要的 –
@jhon是否有可能我可以逐一獲得價值,這樣我就可以應用過濾器或任何邏輯。我要做的是我將發送MemberGroupID和我的函數返回'true'或'false'.if它返回false然後我會發送另一個MemberGroupID或如果它返回true,然後我會打破它,並返回true。沒有光標可能嗎? –
您需要編輯您的問題並提供一些示例數據和/或用例。這可能需要也可能不需要CURSOR。 –
使用循環和用戶查詢 –
我不想使用光標或loop.I想要使用CTE執行 –
SP是做什麼的?它可以成爲TVF嗎? –