2017-03-20 85 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

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

相關問題