Hi All,
I am inserting a value into a table, Before inserting i am checking that record already exists or not in the target table, If its existsing i am making an entry into errorlog table and set the output parameter to 'errorlog' . This is inside the cursor, as il be passing multiple values. Next is I have separate query to get the new record which is not in the target table. Using EXCEPT i get the new record and i insert into a main table. after insertion i set output as 'success'.
Here while executing the procedure i pass a duplicate value and a new value. As it is in cursor,first it will insert into errorlog and set output parameter as 'errorlog' .Next it will insert a new record into main table and set output parameter as 'Success'. So on completion of the execution of the procedure i get output as success.
But i should get as errorlog. I should get success only on no errors in the procedure. How i can i achieve this? Please help me.
Below is my code
IF NOT EXISTS(SELECT Beginmilepost,BeginTrackName,Endmilepost,EndTrackName
FROM SSDB_Segment WHERE BeginMilepost>=@BegMP AND EndMilepost<=@EndMP AND SearchID = @SearchID AND Reference = 'Range')
BEGIN
Declare C_Max1 Cursor FOR
(SELECT Beginmilepost,BeginTrackName,Endmilepost,EndTrackName FROM SSDB_Segment WHERE BeginMilepost = @BegMP AND EndMilepost = @EndMP AND BeginTrackName = @BegtrkName
AND EndTrackName = @EndTrkName AND SearchID = @SearchID)
Open C_Max1
FETCH FROM C_MAX1 INTO @BeginMilepost,@BTrackName,@EndMilepost,@ETrackName
WHILE(@@FETCH_STATUS=0)
BEGIN
IF OBJECT_ID ('tempdb..#temp') IS NOT NULL
BEGIN
DROP TABLE #temp
END--IF
Select BeginLatitude,BeginLongitude,BeginTrackName,BeginMilepost,BeginMilepostPrefix,BeginMilepostSuffix,EndLatitude,EndLongitude,EndTrackName,EndMilepost,TrainType into #temp
FROM
(
SELECT BeginLatitude= case when @BegLat = 0 THEN NULL ELSE @BegLat end ,BeginLongitude= case when @BegLong=0 THEN NULL ELSE @BEgLong end ,@BTrackName AS BeginTrackName,ROUND(@BeginMilepost ,3) AS BeginMilepost,
BeginMilepostPrefix= CASE WHEN @BegPrefix = 'null' THEN NULL ELSE @BegPrefix END,BeginMilepostSuffix= CASE WHEN @BegSuffix = 'null' THEN NULL ELSE @BegSuffix END,
EndLatitude=case when @EndLat =0 then NULL else @EndLat end,EndLongitude=case when @Endlong = 0 THEN NULL ELSE @Endlong END,@ETrackName AS EndTrackName,ROUND(@EndMilepost ,3) AS EndMilepost,@TrainType AS TrainType
UNION ALL
select BeginLatitude,BeginLongitude,BeginTrackName,ROUND(BeginMilepost,3) AS BeginMilepost,BeginMilepostPrefix,BeginMilepostSuffix, EndLatitude,EndLongitude,EndTrackName,ROUND(EndMilepost,3) AS EndMilepost,TrainType from SSDB_MaximumPermissibleSpeed)data
group by BeginLatitude,BeginLongitude,BeginTrackName,BeginMilepost,EndLatitude,EndLongitude,EndTrackName,EndMilepost,BeginMilepostPrefix,BeginMilepostSuffix,TrainType
having COUNT(*)>1
SET @COUNT= (select count(*) from #temp )
Print @COUNT
IF @COUNT>=1
BEGIN
INSERT INTO ErrorLog_Asset (
ErrorCode,
ErrorMessage,
TableName,
MilepostPrefix,
Milepost
)
SELECT
'1',
'Already exists at BeginMp '+ CAST(@BeginMilepost as varchar) +',EndMp '+ CAST(@EndMilepost as varchar) +' ,Beginlat
'+CAST(@BegLat as varchar)
+' ,Endlat '+CAST(@EndLat as varchar)+', BeginTrackName '+@BTrackName +' and EndTrackName '+@ETrackName
,
'MaximumPermissibleSpeed',
CASE WHEN @BegPrefix = 'null' THEN NULL
ELSE @BegPrefix END ,
@BeginMilepost
SET @output = 'Errorlog'
END
IF OBJECT_ID ('tempdb..#Max') IS NOT NULL
BEGIN
DROP TABLE #Max
END--IF
Select BeginLatitude,BeginLongitude,BeginTrackName,BeginMilepost,BeginMilepostPrefix,BeginMilepostSuffix,EndLatitude,EndLongitude,EndTrackName,EndMilepost,TrainType into #Max from
(SELECT BeginLatitude= case when @BegLat = 0 THEN NULL ELSE @BegLat end ,BeginLongitude= case when @BegLong=0 THEN NULL ELSE @BEgLong end ,@BTrackName AS BeginTrackName,ROUND(@BeginMilepost ,3)
AS BeginMilepost,
BeginMilepostPrefix= CASE WHEN @BegPrefix = 'null' THEN NULL ELSE @BegPrefix END,BeginMilepostSuffix= CASE WHEN @BegSuffix = 'null' THEN NULL ELSE @BegSuffix END,
EndLatitude=case when @EndLat =0 then NULL else @EndLat end,EndLongitude=case when @Endlong = 0 THEN NULL ELSE @Endlong END,@ETrackName AS EndTrackName,ROUND(@EndMilepost ,3) AS EndMilepost,@TrainType AS TrainType
except
select BeginLatitude,BeginLongitude,BeginTrackName,ROUND(BeginMilepost,3) AS BeginMilepost,BeginMilepostPrefix,BeginMilepostSuffix, EndLatitude,EndLongitude,EndTrackName,ROUND(EndMilepost,3) AS EndMilepost,TrainType
from SSDB_MaximumPermissibleSpeed)data
Declare C_Max2 Cursor FOR
Select BeginMilepost,BeginTrackName,EndMilepost,EndTrackName from #Max
Open C_Max2
FETCH FROM C_Max2 INTO @BeginMP,@BeginTrackName,@EnMP,@EnTrackName
WHILE(@@FETCH_STATUS=0)
BEGIN
IF (Select COUNT(*) from tbl_Trackname )>=1
BEGIN
IF (@TrainType IN (SELECT TrainType FROM SSDB_TrainType )AND (@Speed <>0) AND @BeginMP IS NOT NULL AND @BeginTrackName IS NOT NULL AND @EnMP IS NOT NULL
AND @Direction IN (SELECT Direction FROM SSDB_Direction) AND @EnTrackName IS NOT NULL )
BEGIN-------------
SET @ID = (Select MAX(MaximumpermissibleSpeedID) from SSDB_MaximumPermissibleSpeed)
IF @COUNT =0
BEGIN
INSERT INTO SSDB_MaximumPermissibleSpeed
(
BeginMilepostPrefix,
BeginMilepostSuffix,
BeginMilepost,
BeginTrackName,
BeginLatitude,
BeginLongitude,
BeginElevation,
EndMilepostPrefix,
EndMilepostSuffix,
EndMilepost,
EndTrackName,
EndLatitude,
EndLongitude,
EndElevation,
Direction,
Speed,
TrainType,
Description,
InsertUser,
S_ID
)
SELECT
CASE WHEN @BegPrefix = 'null' THEN NULL
ELSE @BegPrefix END,
CASE WHEN @BegSuffix = 'null' THEN NULL
ELSE @BegSuffix END,
@BeginMP ,
@BeginTrackName ,
case WHEN @BegLat = 0 THEN NULL
ELSE @BegLat END,
CASE WHEN @BegLong=0 THEN NULL
ELSE @BegLong END ,
CASE WHEN @BegEle = 0 THEN NULL
ELSE @BegEle END ,
CASE WHEN @EndPrefix = 'null' THEN NULL
ELSE @EndPrefix END,
CASE WHEN @EndSuffix = 'null' THEN NULL
ELSE @EndSuffix END,
@EnMP ,
@EnTrackName ,
case WHEN @EndLat = 0 THEN NULL
ELSE @EndLat END,
CASE WHEN @EndLong=0 THEN NULL
ELSE @EndLong END ,
CASE WHEN @EndEle = 0 THEN NULL
ELSE @EndEle END ,
@Direction ,
@Speed ,
@TrainType ,
CASE WHEN @Description ='null' THEN NULL
ELSE @Description END ,
@InsertUser ,
@UID
INSERT INTO SSDB_MaxSpeed_History
(
MSID,
BeginMilepostPrefix,
BeginMilepostSuffix,
BeginMilepost,
BeginTrackName,
BeginLatitude,
BeginLongitude,
BeginElevation,
EndMilepostPrefix,
EndMilepostSuffix,
EndMilepost,
EndTrackName,
EndLatitude,
EndLongitude,
EndElevation,
Direction,
Speed,
TrainType,
Description,
S_ID,
NOTES ,
[Action] ,
InsertUser
)
SELECT
(Select MaximumPermissibleSpeedID from SSDB_MaximumpermissibleSpeed WHERE MaximumPermissibleSpeedID > @ID),
CASE WHEN @BegPrefix = 'null' THEN NULL
ELSE @BegPrefix END,
CASE WHEN @BegSuffix = 'null' THEN NULL
ELSE @BegSuffix END,
@BeginMP ,
@BeginTrackName ,
case WHEN @BegLat = 0 THEN NULL
ELSE @BegLat END,
CASE WHEN @BegLong=0 THEN NULL
ELSE @BegLong END ,
CASE WHEN @BegEle = 0 THEN NULL
ELSE @BegEle END ,
CASE WHEN @EndPrefix = 'null' THEN NULL
ELSE @EndPrefix END,
CASE WHEN @EndSuffix = 'null' THEN NULL
ELSE @EndSuffix END,
@EnMP ,
@EnTrackName ,
case WHEN @EndLat = 0 THEN NULL
ELSE @EndLat END,
CASE WHEN @EndLong=0 THEN NULL
ELSE @EndLong END ,
CASE WHEN @EndEle = 0 THEN NULL
ELSE @EndEle END ,
@Direction ,
@Speed ,
@TrainType ,
CASE WHEN @Description ='null' THEN NULL
ELSE @Description END ,
@UID,
NULL,
'INSERT',
@InsertUser
set @output='Success'
--IF ((@COUNT >=1) AND (@COUNT =0))
--BEGIN
-- SET @output = 'ErrorLog'
--END
--IF (@COUNT = 0)
--BEGIN
--SET@output ='Success'
--END
--END
END
END------------------------>
Deepa