当前位置: 代码迷 >> Sql Server >> 看看这段SQL代码怎么优化下 PK
  详细解决方案

看看这段SQL代码怎么优化下 PK

热度:192   发布时间:2016-04-27 19:31:00.0
看看这段SQL代码如何优化下 PK

SET @vReturnTime =(SELECT ReturnTime FROM car_arrive_info where ListId = @iListId AND (ReturnTime IS NOT NULL AND ReturnTime<>''))
SET @iiSn =(SELECT SN FROM CAR_ARRIVE_INFO WHERE [email protected] AND [email protected])

IF EXISTS (SELECT ReturnTime FROM CAR_ARRIVE_INFO WHERE @vArriveTime < @vReturnTime AND ListId = @iListId AND SN <@iiSn )
BEGIN
UPDATE CAR_ARRIVE_INFO
SET ArriveTime = @vArriveTime,[email protected],State=1,OutTime = @vArriveTime
WHERE ListId = @iListId AND SN = @iSn AND State=0 AND SN <@iiSn AND @vArriveTime < @vReturnTime
END

IF EXISTS (SELECT ReturnTime FROM CAR_ARRIVE_INFO WHERE @vArriveTime > @vReturnTime AND ListId = @iListId AND SN >= @iiSn)
BEGIN
UPDATE CAR_ARRIVE_INFO
SET ArriveTime = @vArriveTime,[email protected],State=1,OutTime = @vArriveTime 
WHERE ListId = @iListId AND SN = @iSn AND State=0 AND SN >[email protected] AND @vArriveTime >= @vReturnTime
END

------解决方案--------------------
SELECT TOP 1 @vReturnTime=ReturnTime 
FROM DBO.car_arrive_info WITH(NOLOCK) 
WHERE ListId = @iListId 
AND (ReturnTime IS NOT NULL 
AND ReturnTime <> '') 
SELECT TOP 1 @iiSn=SN 
FROM dbo.CAR_ARRIVE_INFO WITH(NOLOCK) 
WHERE [email protected] 
AND [email protected]

IF EXISTS (SELECT ReturnTime 
FROM dbo.CAR_ARRIVE_INFO WITH(NOLOCK) 
WHERE @vArriveTime < @vReturnTime 
AND ListId = @iListId 
AND SN <@iiSn ) 
BEGIN 
UPDATE dbo.CAR_ARRIVE_INFO 
SET ArriveTime = @vArriveTime
,[email protected]
,State=1
,OutTime = @vArriveTime 
WHERE ListId = @iListId 
AND SN = @iSn 
AND State=0 
AND SN <@iiSn 
AND @vArriveTime < @vReturnTime 
END 

IF EXISTS (SELECT ReturnTime 
FROM dbo.CAR_ARRIVE_INFO WITH(NOLOCK) 
WHERE @vArriveTime > @vReturnTime 
AND ListId = @iListId AND SN >= @iiSn) 
BEGIN 
UPDATE dbo.CAR_ARRIVE_INFO 
SET ArriveTime = @vArriveTime
,[email protected]
,State=1
,OutTime = @vArriveTime
WHERE ListId = @iListId 
AND SN = @iSn 
AND State=0
AND SN >[email protected] 
AND @vArriveTime >= @vReturnTime 
END
  相关解决方案