在Sql Server中使用Where In子句和表值用户定义函数

时间:2017-03-20 13:26:45

标签: sql-server

我有一个名为" 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。

1 个答案:

答案 0 :(得分:1)

很确定你需要这样的东西。但是不要使用select *。相反,您需要明确并使用您想要的列名称。

SELECT * 
FROM MyTable 
where AddedBy in 
(
    select UserId 
    from dbo.GetRelatedUsersIds(@LoggedUser) 
    where @AddedBy = 0
)
OR 
(
    @AddedBy <> 0
    AND
    AddedBy = @AddedBy
)