2017-03-20 57 views
0

我有一个名为“GetRelatedUsersIds”的表值用户定义函数,它返回任何特定用户的所有子用户(包括自身) 。在Sql Server中使用带表值用户定义函数的Where In子句

而且我有一种情况,我想在条款如下给出使用该功能: -

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返回一个表,所以我得到一个错误“子查询返回多个值”。

如何解决这个问题,TIA。

+0

这不是案例表达式的工作方式。它旨在返回一个单一的值,而不是像你在这里试图做的那样控制逻辑。 –

+0

我知道,但我可以使用此udf在子句中的任何位置.. –

+0

那么,如果函数返回多于一行,您将得到此错误,因为子查询返回多于一行。 –

回答

1

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

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

感谢肖恩,它的工作.. –

相关问题