1

以前の partition-by 関数から一時テーブルを呼び出すストアド プロシージャに partition-by 関数があります。前の関数別パーティションで作成したテーブルは #tempVehicleManifestRow です。これは、次の関数別パーティションに対して呼び出すものです。何が起こるかというと、エラーが発生するということです

「「#tempVehicleManifestRow」付近の構文が正しくありません」

なぜこうなった?実際に選択する前に、必要なデータを含む一時テーブルを既に生成しているのではありませんか?

私が使用した関数によって、パーティションの下にアタッチしました。

これは関数による私の最初のパーティションです:

;WITH A AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY
                CASE
                    when @pOrderby = 'SortByGender' then T.Gender
                    when @pOrderby = 'SortByCost' then T.colCostCenterCodeVarchar
                    when @pOrderby = 'SortByPickupDate' then cast(T.colPickUpDate as varchar(20))
                    when @pOrderby = 'SortByLastName' then T.LastName
                    when @pOrderby = 'SortByFirstName' then T.FirstName
                    when @pOrderby = 'SortByEmployeeID' then cast(T.colSeafarerIdInt as varchar(20))

                    when @pOrderby = 'SortByShip' then T.VesselName
                    when @pOrderby = 'SortByTitle' then T.RankName
                    when @pOrderby = 'SortByRouteFrom' then T.RouteFrom
                    when @pOrderby = 'SortByRouteTo' then T.RouteTo

                    when @pOrderby = 'SortByFromCity' then T.colFromVarchar
                    when @pOrderby = 'SortByToCity' then T.colToVarchar

                    when @pOrderby = 'SortByVehicleTypeName' then T.VehicleTypeName
                    when @pOrderby = 'SortByStatus' then T.VehicleTypeName
                    when @pOrderby = 'SortByCostCenter' then T.colCostCenterCodeVarchar
                    when @pOrderby = 'SortByNationality' then T.Nationality

                    when @pOrderby = 'SortByVehicleVendor' then T.VehicleVendorname

                    when @pOrderby = 'SortByRecordLocator' then T.colRecordLocatorVarchar
                    when @pOrderby = 'SortByOnOffdate' then cast(T.colOnOffDate as varchar(20))
                    when @pOrderby = 'SortByPickupTime' then cast(T.colPickUpTime as varchar(20))
                    when @pOrderby = 'SortByOnOff' then T.colSFStatus
                    when @pOrderby = 'SortByHotel' then T.HotelVendorName
                    ELSE
                           T. VehicleVendorname
            END ,
                CASE WHEN @pOrderby = 'SortByPickupDate' then cast(T.colPickUpTime as varchar(20)) 
                    ELSE T.FirstName
                END
         ) AS xRow, 

         * FROM #tempVehicleManifest T
    ) SELECT * INTO #tempVehicleManifestRow FROM A ORDER BY A.xRow

これは、問題が発生している partition-by です。

;WITH CC AS
(
     SELECT ROW_NUMBER() OVER(PARTITION BY CC.colRecordLocatorVarchar, CC.colSeafarerIdInt,
    CC.colOnOffVarchar , CC.colVehicleVendorIDInt 
    ORDER BY CC.colTagIDInt DESC) xRow, CC.*   
 FROM (
  SELECT distinct
        A.xRow, 
        A.colTransVehicleIDBigint, 
        A.colSeafarerIdInt, A.LastName, A.FirstName, 
        A.colIdBigint, A.colTravelReqIDInt, 
        A.colRecordLocatorVarchar, A.colOnOffDate, 
        A.colRequestIDInt, A.colVehicleVendorIDInt,
        A.VehicleVendorname, A.colVehiclePlateNoVarchar, 
        A.colPickUpDate, A.colPickUpTime, 
        A.colDropOffDate, A.colDropOffTime, 
        A.colConfirmationNoVarchar, A.colVehicleStatusVarchar, 
        A.colVehicleTypeIdInt, A.VehicleTypeName, A.colSFStatus, 
        A.colRouteIDFromInt, A.RouteFrom, A.colRouteIDToInt, A.RouteTo, 
        A.colFromVarchar, A.colToVarchar, A.colRemarksForAuditVarchar, 
        A.colHotelIDInt, A.HotelVendorName, A.colRankIDInt, A.RankName, 
        A.colCostCenterIDInt, A.colCostCenterCodeVarchar, 
        Nationality = RTRIM(LTRIM(N.colNationalityCodeVarchar)) + '-' + RTRIM(LTRIM(N.colNationalityDescriptionVarchar)),
        A.colIsVisibleBit, 
        A.colContractIdInt, A.Gender, A.colVesselIdInt, 
        A.VesselName, UserID = @pUserID, A.colSeqNoInt
        , A.colDriverIDInt
        --, A.colIsNoVehicleNeeded  
        , A.colVehicleDispatchTime
        , FlightNo =A.colFlightNoVarchar
        , Carrier = A.colMarketingAirlineCodeVarchar    

        , Departure = A.colDepartureAirportLocationCodeVarchar
        , Arrival = A.colArrivalAirportLocationCodeVarchar
        , DeptDate = A.colDepartureDateTime
        , ArrDate = A.colArrivalDateTime
        , PA.PassportNo
        , PA.PassportExp
        , PA.PassportIssued
        , BR.Birthday
        , ISNULL(CC.colIsActiveBit,0) as colIsActiveBitTagged
        , CC.colCreatedByVarchar as createdUserTag
        , CC.colModifiedByVarchar as modifiedUserTag
        , CC.colVehicleVendorIDInt as taggedVehicleVendorId
        #tempVehicleManifestRow A 
        LEFT JOIN TblVehicleManifestConfirmed B ON
                A.colSeafarerIdInt = B.colSeafarerIdInt AND
                A.colVehicleVendorIDInt = B.colVehicleVendorIDInt AND
                A.colPickUpDate = B.colPickUpDate AND
                ISNULL(A.colRecordLocatorVarchar,'') = ISNULL(B.colRecordLocatorVarchar,'')
                AND A.colRouteIDFromInt = B.colRouteIDFromInt
                AND A.colRouteIDToInt = B.colRouteIDToInt
        --not visible to vendor but not realy cancelled
        LEFT JOIN TblVehicleManifestConfirmed Hide ON
                A.colSeafarerIdInt = Hide.colSeafarerIdInt AND
                A.colVehicleVendorIDInt = Hide.colVehicleVendorIDInt AND
                A.colPickUpDate = Hide.colPickUpDate AND
                ISNULL(A.colRecordLocatorVarchar,'') = ISNULL(Hide.colRecordLocatorVarchar,'') AND          
                ISNULL(Hide.colIsVisibleBit,1) = 0
                AND A.colRouteIDFromInt = B.colRouteIDFromInt
                AND A.colRouteIDToInt = B.colRouteIDToInt
                --added new table
            LEFT JOIN TblTag_Vehicle CC ON B.colIdBigint = CC.colIdBigint AND
                B.colTravelReqIDInt = CC.colTravelReqIDInt AND B.colSeafarerIdInt = CC.colSeafarerIdInt             
                --end new added table
        LEFT JOIN dbo.TblVehiclePlates VP ON VP.colPlateID = B.colVehiclePlateNoVarchar
        LEFT JOIN dbo.TblSeafarer S ON S.colSeafarerIdInt = A.colSeafarerIdInt      
        LEFT JOIN TblNationality N ON N.colNatioalityIdInt = S.colNationalityIDInt
        LEFT JOIN #TempPassport PA ON A.colSeafarerIdInt = PA.SeafarerId
        LEFT JOIN tmRemarks_Birthday BR ON BR.FK_ItineraryRefID = A.colRecordLocatorVarchar
        JOIN #tempVehicleVendor VE ON VE.colVehicleVendorIDInt = A.colVehicleVendorIDInt
    WHERE 
        (   B.colConfirmedManifestIDBigint IS NULL  
            OR 
            Hide.colTransVehicleIDBigint IS NOT NULL
        )
    ORDER BY A.xRow
 )
) SELECT * INTO #tempManifestNew
4

1 に答える 1

-1

の近くのこのクエリでFROM 句がありません#tempVehicleManifestRow A。これが正しいクエリです。

;WITH CC
AS (
    SELECT ROW_NUMBER() OVER (
            PARTITION BY CC.colRecordLocatorVarchar
            ,CC.colSeafarerIdInt
            ,CC.colOnOffVarchar
            ,CC.colVehicleVendorIDInt ORDER BY CC.colTagIDInt DESC
            ) xRow
        ,CC.*
    FROM (
        SELECT DISTINCT A.xRow
            ,A.colTransVehicleIDBigint
            ,A.colSeafarerIdInt
            ,A.LastName
            ,A.FirstName
            ,A.colIdBigint
            ,A.colTravelReqIDInt
            ,A.colRecordLocatorVarchar
            ,A.colOnOffDate
            ,A.colRequestIDInt
            ,A.colVehicleVendorIDInt
            ,A.VehicleVendorname
            ,A.colVehiclePlateNoVarchar
            ,A.colPickUpDate
            ,A.colPickUpTime
            ,A.colDropOffDate
            ,A.colDropOffTime
            ,A.colConfirmationNoVarchar
            ,A.colVehicleStatusVarchar
            ,A.colVehicleTypeIdInt
            ,A.VehicleTypeName
            ,A.colSFStatus
            ,A.colRouteIDFromInt
            ,A.RouteFrom
            ,A.colRouteIDToInt
            ,A.RouteTo
            ,A.colFromVarchar
            ,A.colToVarchar
            ,A.colRemarksForAuditVarchar
            ,A.colHotelIDInt
            ,A.HotelVendorName
            ,A.colRankIDInt
            ,A.RankName
            ,A.colCostCenterIDInt
            ,A.colCostCenterCodeVarchar
            ,Nationality = RTRIM(LTRIM(N.colNationalityCodeVarchar)) + '-' + RTRIM(LTRIM(N.colNationalityDescriptionVarchar))
            ,A.colIsVisibleBit
            ,A.colContractIdInt
            ,A.Gender
            ,A.colVesselIdInt
            ,A.VesselName
            ,UserID = @pUserID
            ,A.colSeqNoInt
            ,A.colDriverIDInt
            --, A.colIsNoVehicleNeeded  
            ,A.colVehicleDispatchTime
            ,FlightNo = A.colFlightNoVarchar
            ,Carrier = A.colMarketingAirlineCodeVarchar
            ,Departure = A.colDepartureAirportLocationCodeVarchar
            ,Arrival = A.colArrivalAirportLocationCodeVarchar
            ,DeptDate = A.colDepartureDateTime
            ,ArrDate = A.colArrivalDateTime
            ,PA.PassportNo
            ,PA.PassportExp
            ,PA.PassportIssued
            ,BR.Birthday
            ,ISNULL(CC.colIsActiveBit, 0) AS colIsActiveBitTagged
            ,CC.colCreatedByVarchar AS createdUserTag
            ,CC.colModifiedByVarchar AS modifiedUserTag
            ,CC.colVehicleVendorIDInt AS taggedVehicleVendorId
        -- HERE YOU HAVE MISSED FROM CLAUSE 
        FROM #tempVehicleManifestRow A
        LEFT JOIN TblVehicleManifestConfirmed B ON A.colSeafarerIdInt = B.colSeafarerIdInt
            AND A.colVehicleVendorIDInt = B.colVehicleVendorIDInt
            AND A.colPickUpDate = B.colPickUpDate
            AND ISNULL(A.colRecordLocatorVarchar, '') = ISNULL(B.colRecordLocatorVarchar, '')
            AND A.colRouteIDFromInt = B.colRouteIDFromInt
            AND A.colRouteIDToInt = B.colRouteIDToInt
        --not visible to vendor but not realy cancelled
        LEFT JOIN TblVehicleManifestConfirmed Hide ON A.colSeafarerIdInt = Hide.colSeafarerIdInt
            AND A.colVehicleVendorIDInt = Hide.colVehicleVendorIDInt
            AND A.colPickUpDate = Hide.colPickUpDate
            AND ISNULL(A.colRecordLocatorVarchar, '') = ISNULL(Hide.colRecordLocatorVarchar, '')
            AND ISNULL(Hide.colIsVisibleBit, 1) = 0
            AND A.colRouteIDFromInt = B.colRouteIDFromInt
            AND A.colRouteIDToInt = B.colRouteIDToInt
        --added new table
        LEFT JOIN TblTag_Vehicle CC ON B.colIdBigint = CC.colIdBigint
            AND B.colTravelReqIDInt = CC.colTravelReqIDInt
            AND B.colSeafarerIdInt = CC.colSeafarerIdInt
        --end new added table
        LEFT JOIN dbo.TblVehiclePlates VP ON VP.colPlateID = B.colVehiclePlateNoVarchar
        LEFT JOIN dbo.TblSeafarer S ON S.colSeafarerIdInt = A.colSeafarerIdInt
        LEFT JOIN TblNationality N ON N.colNatioalityIdInt = S.colNationalityIDInt
        LEFT JOIN #TempPassport PA ON A.colSeafarerIdInt = PA.SeafarerId
        LEFT JOIN tmRemarks_Birthday BR ON BR.FK_ItineraryRefID = A.colRecordLocatorVarchar
        JOIN #tempVehicleVendor VE ON VE.colVehicleVendorIDInt = A.colVehicleVendorIDInt
        WHERE (
                B.colConfirmedManifestIDBigint IS NULL
                OR Hide.colTransVehicleIDBigint IS NOT NULL
                )
        ) AS x -- missing alias declaration, required in TSQL
    )
SELECT *
INTO #tempManifestNew
于 2014-09-11T03:54:40.503 に答える