我有一个名为" GetRelatedUsersIds"的表值用户定义函数,它反过来返回任何特定用户的所有子用户(包括其自身),如果有的话。
我有一个场景,我希望这个函数在where子句中使用,如下所示: -
Create procedure [ABC]
(
@AddedBy Int,
@LoggedUser int=0
)
as
SELECT * FROM MyTable
where AddedBy in (case when @AddedBy =0 then (select UserId from dbo.GetRelatedUsersIds(@LoggedUser)) else @AddedBy end)
这里我寻找变量@AddedBy如果它是0然后我将去变量@LoggedUser。
CREATE function [dbo].[GetRelatedUsersIds]
(
@ccManagerId INT
)
returns @tableUsersId table(UserId int)
AS
.... code
但是当UDF返回一个表时,我得到的错误是" Subquery返回的值超过1"。
如何解决这个问题,TIA。
答案 0 :(得分:1)
很确定你需要这样的东西。但是不要使用select *。相反,您需要明确并使用您想要的列名称。
SELECT *
FROM MyTable
where AddedBy in
(
select UserId
from dbo.GetRelatedUsersIds(@LoggedUser)
where @AddedBy = 0
)
OR
(
@AddedBy <> 0
AND
AddedBy = @AddedBy
)