2
我已经创建了一个TVP,并且我正尝试在存储过程中将它用于存储过程中的输入。 问题是我无法用它创建我的SP。它说无法在Stored Proc中将变量声明为TVP类型
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 [email protected]
WHERE [email protected] AND
MIMO.MoveInTime BETWEEN @startDate AND @endDate
GROUP BY MIMO.UserID
SET NOCOUNT OFF
END
GO
谁能告诉我有什么错我是做什么...我已经试过什么,我知道,但似乎没有任何工作。
谢谢先进。
非常感谢它worked..you救了我大量的时间。 – Sumit 2011-04-02 16:59:21
我想知道为什么需要创建一个别名的原因,是因为我使用连接,因为我已经在子查询中使用TVP而不创建别名。 – Sumit 2011-04-02 17:05:40
这个“问题”不是特定于TVPs,而是特定于任何表变量。与普通表一样,如果两个列名称具有意义,他们需要通过表标识符或别名来限定。现在发生的情况是,如果不指定别名,则必须将该名称放入'[]'中,以便解析器不会将其识别为变量名称,而是将其识别为列名限定。 – Lucero 2011-04-02 21:36:23