2017-03-16 63 views
2

我尝试从数函数收集我的数据,并把它的变量表调用内部进行@GetAllRep,然后添加一个条件,如必须声明标量变量在SQLSERVER

WHERE @GetAllRep.UserId IN (SELECT @tableSubset.userId FROM @tableSubset) 

用于过滤我的数据用户ID场,但给我这个错误:

必须声明标量变量“@GetAllRep”。

必须声明标量变量“@tableSubset”。

ALTER PROCEDURE [dbo].[ProceCompleteReportB2B] 
(
    @startdate  DATETIME, 
    @enddate  DATETIME, 
    @top   INT, 
    @state   INT, 
    @type   INT, 
    @subset  NVARCHAR(15), 
    @oneSubset  NVARCHAR(128), 
    @userId  NVARCHAR(128) 
) 
AS 
BEGIN 
    DECLARE @GetAllRep TABLE 
      (
       [Id] [int], 
       [factorno][int], 
       [PayType][bit], 
       [ReserveNumber][int], 
       [ReserveState][int], 
       [state][nvarchar](50), 
       [Price][nvarchar](50), 
       [ReserveType][nvarchar](50), 
       [ObjectIdDepartue][int], 
       [IssueDate][nvarchar](50), 
       [BankId][int], 
       [Confirmed][bit], 
       [TrackingCode][nvarchar](50), 
       [Transactionsuccess][nvarchar](50), 
       [Name][nvarchar](128), 
       [TiketUrl][nvarchar](128), 
       [ObjectIdReturn] [int] NULL, 
       [TelNumber][nvarchar](50) NULL, 
       [UserId][nvarchar](128) 
      ) 

    IF (@type = 0) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncFlightReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncTrainReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncCharterReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncBusReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncInsuranceReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncCarReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncHotelReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncIFlightReportB2B](@startdate, @enddate, @top, @state) 
     UNION 
     SELECT * 
     FROM dbo.[FuncMassageReportB2B](@startdate, @enddate, @top, @state) 
    ------------------------------------------------------------------- 
    IF (@type = 1) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncFlightReportB2B](@startdate, @enddate, @top, @state) 
       ----------------------------------------------------------------------- 
    ELSE 
    IF (@type = 2) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncTrainReportB2B](@startdate, @enddate, @top, @state) 
    ----------------------------------------------------------------------- 
    IF (@type = 3) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncCharterReportB2B](@startdate, @enddate, @top, @state) 
       --------------------------------------------------------------------- 
    ELSE 
    IF (@type = 4) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncBusReportB2B](@startdate, @enddate, @top, @state) 
    --------------------------------------------------------------------- 
    IF (@type = 5) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncInsuranceReportB2B](@startdate, @enddate, @top, @state) 
       --------------------------------------------------------------------- 
    ELSE 
    IF (@type = 6) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncCarReportB2B](@startdate, @enddate, @top, @state) 
    --------------------------------------------------------------------- 
    IF (@type = 7) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncHotelReportB2B](@startdate, @enddate, @top, @state) 
       --------------------------------------------------------------------- 
    ELSE 
    IF (@type = 8) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncIFlightReportB2B](@startdate, @enddate, @top, @state) 
    ELSE 
    IF (@type = 9) 
     INSERT INTO @GetAllRep 
     SELECT * 
     FROM dbo.[FuncMassageReportB2B](@startdate, @enddate, @top, @state) 
    --------------------------------------------------------------------- 
    DECLARE @tableSubset TABLE ([userId] [nvarchar](128)) 
    INSERT INTO @tableSubset 
    SELECT * 
    FROM dbo.FuncGetSubsetUserIds(@subset, @oneSubset, @userId) AS SubsetUserIds 

    SELECT * 
    FROM @GetAllRep 
    WHERE @GetAllRep.UserId IN (SELECT @tableSubset.userId FROM @tableSubset) 
    ORDER BY 
      IssueDate DESC 
END 

如何解决这一问题?

回答

2

只需创建别名表变量,并在WHERE子句

SELECT * 
FROM @GetAllRep GetAllRep 
       ---^^^ 
WHERE GetAllRep.UserId IN (SELECT userId FROM @tableSubset t) 
ORDER BY 
     IssueDate DESC 
+0

确定这是正确的使用它。现在得到这个错误:必须声明标量变量“@tableSubset”。 – programmer138200

+1

好吧,它解决了。非常感谢 – programmer138200