在我的第一个存储过程中,我的表类型为
@EmployeeGuidIdTableType [Helper].[GuidIdTableType] READONLY
然后我将此表发送给另一个过程,例如:
EXEC [usp_TaskStatus_Time_Calculation]
@EmployeeGuidIdTableType = @EmployeeGuidIdTableType
然后进入第二个存储过程,我将其作为参数接收,例如:
@EmployeeGuidIdTableType [Helper].[GuidIdTableType] READONLY
最后,我想将其用于此插入的where子句中,例如:
INSERT INTO @TaskStatusAuditToUseTable
SELECT
[TS].[TaskStatusAuditId]
, [TS].[Date]
, [TS].[EmpGuid]
, [TS].[TaskStatusName]
, [TS].[TaskTypeName]
, [TS].[TaskId]
FROM [TaskStatusAudit] AS [TS]
INNER JOIN [Task] AS [T] ON [TS].[TaskId] = [T].[TaskId]
WHERE(@TaskId IS NULL
OR @TaskId = [TS].[TaskId])
AND (@EmployeeGuidIdTableType IS NULL
OR [TS].[EmpGuid] IN (SELECT [Id]
FROM @EmployeeGuidIdTableType
WHERE [TS].[EmpGuid] = @EmployeeGuidIdTableType))
但是@EmployeeGuidIdTableType
被标记为红色并抛出:
必须声明标量变量
@EmployeeGuidIdTableType
我在做什么错?我可以声明为:
DECLARE @GuidIdTableTypeValue UNIQUEIDENTIFIER = (SELECT TOP 1 [Id] FROM @EmployeeGuidIdTableType)
并使用@GuidIdTableTypeValue
,但是表类型的想法是执行多次插入,但是如果我声明为:
DECLARE @GuidIdTableTypeValue UNIQUEIDENTIFIER = (SELECT [Id] FROM @EmployeeGuidIdTableType)
然后执行存储过程
程序usp_TaskStatus_Time_Calculation, 第24行[Batch Start Line 191]子查询返回的值超过1。 当子查询遵循=,!=,<,<=,>,> =时,不允许这样做 或将子查询用作表达式时。
我在做什么错?问候
答案 0 :(得分:1)
我在做什么错了?
您正在尝试编写一个比较运算符,该运算符无法将表与标量值进行比较。标量值包含一个值,表包含多个行,因此无法像您所做的那样将它们与等号进行比较。
您可能是想将它们与IN()运算符进行比较吗?您不清楚要达到什么结果。