sql-server - 无法在存储过程中将变量声明为 TVP 类型

标签 sql-server stored-procedures table-valued-parameters

我已经创建了一个 TVP,并且我正在尝试在存储过程中使用它来输入存储过程。 问题是我无法用它创建我的 SP。它说

Msg 137, Level 16, State 1, Procedure uspGetUsersPresentCount, Line 14
Must declare the scalar variable "@usersList".

我的SP是

IF EXISTS (SELECT * FROM sysobjects WHERE name = 'uspGetUsersPresentCount')
    BEGIN
        DROP  Procedure  [AMProcedures].[uspGetUsersPresentCount]
    END

GO


SET ANSI_NULLS ON
GO 

SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [AMProcedures].[uspGetUsersPresentCount]
(
    @usersList AS [AMProcedures].[udfUserListTVP] READONLY,
    @startDate DATETIME,
    @endDate DATETIME
)
AS
BEGIN
DECLARE @okStatus TINYINT = 4
SET NOCOUNT ON

    SELECT MIMO.UserID, COUNT(MIMO.MoveInTime) FROM AMTables.tblUserMoveInMoveOutDetails MIMO
        JOIN @usersList ON <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c4145414322597f697e4548314c797f697e7f40657f7822597f697e4548" rel="noreferrer noopener nofollow">[email protected]</a>
            WHERE MIMO.Status=@okStatus AND
                MIMO.MoveInTime BETWEEN @startDate AND @endDate
            GROUP BY MIMO.UserID

SET NOCOUNT OFF

END
GO

谁能告诉我我做错了什么......我已经尝试了我所知道的,但似乎没有任何效果。

提前致谢。

最佳答案

为用户列表使用别名,或将其放在方括号中:

JOIN @usersList UL ON MIMO.UserID=UL.UserID

JOIN @usersList ON MIMO.UserID=[@usersList].UserID

关于sql-server - 无法在存储过程中将变量声明为 TVP 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524487/

相关文章:

C#:将 DataTable 传递给 SQL Server 非常慢

sql-server - 当IDENTITY_INSERT设置为ON时,必须为表中的标识列指定显式值

sql - 理解为什么 SQL 查询需要这么长时间

sql - 获取 GROUP BY 记录子集的计数

mysql - 随着时间的推移,选择的记录越来越少?

mysql - 将 CSV 加载到多个表以解决关键约束问题

sql-server - 使用 SQL 高效查询记录的最新版本

mysql - 为什么 mySQL 过程在从过程内部调用时返回 null,但在单独调用时则不返回 null

c# - 传递大型表值参数时超时