2014-03-05 2 views
0

현재 파일이있는 경우 업데이트하고 그렇지 않은 경우 삽입하는 저장 프로 시저가 있습니다. 아래 쿼리의 문제는 관계없이 모든 레코드를 삽입하는 것 같습니다.IF 존재하지 않는 경우

문제가 무엇인지 파악할 수 없습니까? SQL 서버를 2012

ALTER PROC [dbo].[usp_UpdateInsertOptimise_new] 
@Resid int = null, 
@PostCode varchar(50), 
@DriverID int, 
@droporder int, 
@X int, 
@Y int, 
@Calculate bit, 
@uidref bigint, 
@Description1 varchar(500), 
@Description2 varchar(500), 
@Description3 varchar(500), 
@Uiddriver int, 
@reservationsid int, 
@Time varchar(50), 
@TimeInPoint int, 
@UniqueString varchar(50), 
@DistanceBetweenTwoPoints float, 
@Weight int, 
@TimeBetweenPoints int, 
@TimeFrom datetime, 
@TimeTo datetime, 
@TotalDistance float, 
@Display varchar(150), 
@Volume float, 
@VehicleID int, 
@Pallets int, 
@AddressId int, 
@CD nvarchar(10), 
@ForkLiftRequired bit, 
@HazardousRequired bit, 
@FridgeRequired bit, 
@TailLiftRequired bit, 
@CurtinsideRequired bit, 
@CDID varchar(50), 
@CDOrder int, 
@OriginalDate datetime, 
@ArivalTime datetime, 
@TimeForStage int, 
@Optimise bit, 
@ForVehicleGroupID int, 
@DepotID int 

AS 

if EXISTS (SELECT * FROM optimise WITH (READUNCOMMITTED) 
Where ReservationsID = @ResID) 

BEGIN 
UPDATE dbo.Optimise SET 
PostCode = @PostCode, 
[DriverID] = @DriverID, 
[droporder] = @DropOrder, 
[X] = @X, 
[Y] = @Y, 
[Calculate] = @Calculate, 
[uidref] = @UIDRef, 
[Description1] = @Description1, 
[Description2] = @Description2, 
[Description3] = @Description3, 
[Uiddriver] = @UIDDriver, 
[reservationsid] = @ReservationsID, 
[Time] = @Time, 
[TimeInPoint] = @TimeInPoint, 
[UniqueString] = @UniqueString, 
[DistanceBetweenTwoPoints] = @DistanceBetweenTwoPoints, 
[Weight] = @Weight, 
[TimeBetweenPoints] = @TimeBetweenPoints, 
[TimeFrom] = @TimeFrom, 
[TimeTo] = @TimeTo, 
[TotalDistance] = @TotalDistance, 
[Display] = @Display, 
[Volume] = @Volume, 
[VehicleID] = @VehicleID, 
[Pallets] = @Pallets, 
[AddressID] = @AddressID, 
[CD] = @CD, 
[ForkliftRequired] = @ForkLiftRequired, 
[HazardousRequired] = @HazardousRequired, 
[FridgeRequired] = @FridgeRequired, 
[TailLiftRequired] = @TailLiftRequired, 
[CurtinsideRequired] = @CurtinsideRequired, 
[CDID] = @CDID, 
[CDOrder] = @CDOrder, 
[OriginalDate] = @OriginalDate, 
[ArivalTime] = @ArivalTime, 
[TimeForStage] = @TimeForStage, 
[Optimise] = @Optimise, 
[ForVehicleGroupID] = @ForVehicleGroupID, 
[DepotID] = @DepotID 

WHERE ReservationsID = @ResID 

END 

ELSE 

IF NOT EXISTs(SELECT * FROM optimise WITH (READUNCOMMITTED) 
Where ReservationsID = @ResID) 

BEGIN 



INSERT INTO [Optimise] 
([PostCode], 
[DriverID], 
[droporder], 
[X], 
[Y], 
[Calculate], 
[uidref], 
[Description1], 
[Description2], 
[Description3], 
[Uiddriver], 
[reservationsid], 
[Time], 
[TimeInPoint], 
[UniqueString], 
[DistanceBetweenTwoPoints], 
[Weight], 
[TimeBetweenPoints], 
[TimeFrom], 
[TimeTo], 
[TotalDistance], 
[Display], 
[Volume], 
[VehicleID], 
[Pallets], 
[AddressId], 
[CD], 
[ForkliftRequired], 
[HazardousRequired], 
[FridgeRequired], 
[TailLiftRequired], 
[CurtinsideRequired], 
[CDID], 
[CDOrder], 
[OriginalDate], 
[ArivalTime], 
[TimeForStage], 
[Optimise], 
[ForVehicleGroupID], 
[DepotID]) 

VALUES (
@PostCode, 
@DriverID, 
@DropOrder, 
@X, 
@Y, 
@Calculate, 
@UIDRef, 
@Description1, 
@Description2, 
@Description3, 
@UIDDriver, 
@ReservationsID, 
@Time, 
@TimeInPoint, 
@UniqueString, 
@DistanceBetweenTwoPoints, 
@Weight, 
@TimeBetweenPoints, 
@TimeFrom, 
@TimeTo, 
@TotalDistance, 
@Display, 
@Volume, 
@VehicleID, 
@Pallets, 
@AddressId, 
@CD, 
@ForkLiftRequired, 
@HazardousRequired, 
@FridgeRequired, 
@TailLiftRequired, 
@CurtinsideRequired, 
@CDID, 
@CDOrder, 
@OriginalDate, 
@ArivalTime, 
@TimeForStage, 
@Optimise, 
@ForVehicleGroupID, 
@DepotID) 


END 

GO 
+0

불필요한 두 번째 IF를 제거하십시오. 'ELSE BEGIN' – Mihai

+0

@ResId는 당신이 생각하는 것을 보유하고 있습니까? – Fred

+0

SQL 프로파일 러를 실행하는 경우 RPC :이 프로세스에서 완료된 추적은 @Resid 매개 변수가 올바르게 전달되는지 확인할 수 있습니까? –

답변

1

이 그래도 기본에 다시 생색 것 같으면 정말 미안 전혀 아무 잘못 볼 수 없습니다 :

  • 가 올바른 SP를 호출하고 있습니까? 위의 SP에 _new가 추가되었음을 확인했습니다. usp_UpdateInsertOptimise_new

  • 올바른 ResID를 전달하고 있습니까? 그들은 존재합니까, proc을 호출 할 때 이것을 추적 했습니까?

  • true/false를 반환하도록 proc를 단순화하고, 발화를 확인하고, ID가 존재하는지 여부를 확인하는 데 필수적인 것을 제거하십시오. IF NOT EXISTS가 어떤 일이 일어나는지 보려면 IF EXISTS를 전환 해보십시오.

0

@ResID를 사용

는 상단에 null로 디폴트됩니다. 이유는 모르겠지만, 그것 때문에 작동하지 않았다!

+0

이상하게도, proc null을 호출 할 때 매개 변수를 바꿀 때 작동하지 않아야합니다. 그냥 테스트. – GJKH

+0

그래, 그게 내가 생각한거야. 그래서 나는 그걸 받아들이지 않았다. 매개 변수가 전달되면 null 값은 무효가됩니까? –

+0

이상한, 나는 이것을 테스트하고 그것은 예상대로 작동하는 것처럼 보였습니다, 아마도 그것은 proc 호출 방법에 따라 다릅니다. 다행 이네. – GJKH

관련 문제