Quantcast
Channel: ฟอรัม Getting started with SQL Server
Viewing all articles
Browse latest Browse all 8428

CHECK for duplicate inside a cursor and pass a ouptut parameter in sql server 2008

$
0
0

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


Viewing all articles
Browse latest Browse all 8428

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>