从一家商店到另一家商店使用表类型

时间:2018-08-08 18:07:21

标签: sql sql-server

在我的第一个存储过程中,我的表类型为

@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。   当子查询遵循=,!=,<,<=,>,> =时,不允许这样做   或将子查询用作表达式时。

我在做什么错?问候

1 个答案:

答案 0 :(得分:1)

  

我在做什么错了?

您正在尝试编写一个比较运算符,该运算符无法将表与标量值进行比较。标量值包含一个值,表包含多个行,因此无法像您所做的那样将它们与等号进行比较。

您可能是想将它们与IN()运算符进行比较吗?您不清楚要达到什么结果。