SQL 服务器 - 语法错误

SQL Server - Syntax Error

我不断收到:“关键字 'WHERE' 附近的语法错误。

我很难 'most' 找出原因。我已经消除了除此之外的所有语法错误,但我不知所措。任何帮助,将不胜感激。 WHERE 子句--- 我把包围在** where ** 给你。需要额外的眼睛!

DECLARE @vEndTime DateTime
Declare @vStartTime DateTime
DECLARE @sql4 nvarchar(4000)
DECLARE @parameters nvarchar(4000)
SET @parameters = '@vStartTime boards.DateEnd, @vEndTime boards.DateEnd'
set @vEndTime = '09/24/2011 12:00:00:00'
set @vStartTime = (SELECT MAX(DateEnd) FROM [UICTransfer_Archive].[dbo].[StageLotLineage])

WHILE @vStartTime < '09/24/2011 12:00:00:00'

BEGIN 

SET @vEndTime = DATEADD (minute , 60 , @vStartTime )

select @sql4 = N'

INSERT INTO [UICTransfer_Archive].[dbo].[StageLotLineage](LineName, BoardBarcode, MachineProductName, DateStart,
DateEnd, MachineName, PlacementTime, RefID, CircuitNumber, FeederSlot, FeederTrack, Component,
LotNumber, ReelID)

SELECT 
       boards.LineName
      ,SUBSTRING(boards.BoardBarcode, 1, 5) AS BoardBarcode
     -- ,board.BoardBarcode
      ,boards.MachineProductName
      ,convert(varchar,boards.DateStart,120)
      ,convert(varchar,boards.DateEnd,120)
      ,placements.MachineName
      ,convert(varchar,placements.PlacementTime,120)
      ,placements.RefID
      ,placements.CircuitNumber
      ,placements.FeederSlot
      ,placements.FeederTrack
      ,locations.Component
      ,locations.LotNumber
      ,locations.ReelID
  FROM [UICTransfer_Archive].[dbo].[TrnsBoardComplete] as boards
   LEFT JOIN [UICTransfer_Archive].[dbo].[TrnsPlacements] as placements
      ON placements.BoardCompleteID = boards.BoardCompleteID
   LEFT JOIN [UICTransfer_Archive].[dbo].[TrnsLocations] as locations
    ON (locations.FeederSlot=placements.FeederSlot and
locations.FeederTrack = placements.FeederTrack and
locations.FeederStack = placements.FeederStack and
locations.FeederPallet = placements.FeederPallet and
locations.MachineName = placements.MachineName and
placements.PlacementTime >= locations.DateValidated and 
(placements.PlacementTime <= locations.DateInvalidated 
or locations.DateInvalidated IS NULL) 
**where boards.DateEnd >= @vStartTime 
 and boards.DateEnd <= @vEndTime 
 and placements.CircuitNumber IS NOT NULL '**

EXEC SP_EXECUTESQL @sql4,@parameters,@vStartTime, @vEndTime
--select @@rowcount

SET @vStartTime = DATEADD (minute , 60 , @vEndTime )

END

您需要在联接的末尾添加右括号。

or locations.DateInvalidated IS NULL) )

(locations.FeederSlot=placements.FeederSlot and
locations.FeederTrack = placements.FeederTrack and
locations.FeederStack = placements.FeederStack and
locations.FeederPallet = placements.FeederPallet and
locations.MachineName = placements.MachineName and
placements.PlacementTime >= locations.DateValidated and 
(placements.PlacementTime <= locations.DateInvalidated 
or locations.DateInvalidated IS NULL))