使用传入的字符串列表组合 SQL 服务器存储过程 WITH LOCK 和 INNER JOIN

Combining SQL Server stored procedure WITH LOCK and INNER JOIN using passed in list of strings

我正在尝试创建一个 SQL 过程,我可以传递一个字符串列表和 return 仅当存在现有结果并将其与 with lock 语句组合时才可以。我正在使用用户定义的 Table 类型来传递字符串列表,但我没有使用过那么多程序,我收到了下面将要 post 的错误。我在数据库优先代码应用程序上使用 EF 6 和 C#。这是我尝试执行的代码以及我想如何在 C# 代码中调用它:

CREATE TYPE TaskTable 
AS TABLE ( Name VARCHAR(7) );
GO

CREATE PROCEDURE [dbo].[DequeuePending]
    @tasklist TaskTable READONLY
AS
    SET NOCOUNT ON;
    DECLARE @now AS DATETIME;
    SET @now = getutcdate();

    WITH cte AS   
    (
        SELECT TOP (1) Task
        FROM InProgresses 
        INNER JOIN @tasklist ON InProgresses.Task = @tasklist.Name WITH (ROWLOCK, READPAST)
        WHERE Date < @now && InProgresses.Task IS NOT NULL
        ORDER BY Date
    )
    DELETE cte
    OUTPUT deleted.Task;
GO

我收到这个错误:

Must declare the scalar variable @tasklist

C#代码:

var taskList = new List<string>() { "Name1", "Name2", "Name3" };
using var context = new dbconfig();
var topItem = context.DequeuePending(taskList);

我尝试做一个 DECLARE @list as TaskTable;并收到同样的错误,所以我觉得我在这里遗漏了一些简单的东西。

ON InProgresses.Task = @tasklist.Name

感觉跟这行有点关系

INNER JOIN @tasklist tl
      ON InProgresses.Task = tl.Name

通常我会为有问题的 table 分配别名,以便稍后在查询中引用它。我不太熟悉用户定义的 table 类型,所以如果上述建议不起作用,也许只是从 table 直接 select 看看是否一切正常.