Table 值函数以 table 作为参数并执行连接

Table-valued function that takes table as parameter and performs join

我使用 SQL 服务器 2016。 我想编写一个将 table 作为参数的函数,然后对 table 与另一个 table 执行连接。 我声明了以下类型:

CREATE TYPE WorklistTable AS TABLE (WorklistId int NOT NULL)

然后我在很多根据特定条件进行选择的函数中使用它

CREATE FUNCTION [dbo].[fnGetSomeData] (
@WorklistIds WorklistTable readonly
)
RETURNS TABLE
    AS RETURN
    (   
    select WorklistId, wlu.UserId
    from @WorklistIds
    join [dbo].[WorklistUser] wlu on wlu.WorklistId = @WorklistIds.worklistId   
    -- the rest is omitted 
);

我收到以下错误:

Must declare the scalar variable "@WorklistIds".

我尝试声明变量,但出现错误:

The variable name '@WorklistIds' has already been declared. Variable names must be unique within a query batch or stored procedure.

加入 table 变量时应使用别名。

CREATE FUNCTION [dbo].[fnGetSomeData] (
@WorklistIds WorklistTable readonly
)
RETURNS TABLE
    AS RETURN
    (   
    select WorklistId, wlu.UserId
    from @WorklistIds t
    join [dbo].[WorklistUser] wlu on wlu.WorklistId = t.worklistId   
    -- the rest is omitted 
);

在 table 变量中引用列时不能直接使用 @Table 名称。您要么需要为 table 添加别名,要么将其括在方括号中:

select WorklistId, wlu.UserId
from @WorklistIds As W
join [dbo].[WorklistUser] wlu on wlu.WorklistId = W.worklistId 

或者

select WorklistId, wlu.UserId
from @WorklistIds
join [dbo].[WorklistUser] wlu on wlu.WorklistId = [@WorklistIds].worklistId