Hi ,
I have a scenario Like a variable is of decimal type , and for that variable i am setting a NULL value. I am getting an error, i tried many ways like cast converstion, ISNULL but those things didnt help me,Below is my procedure, Please help me in sorting this..
CREATE PROCEDURE sptalon_MaxSpeedSave
(
@ListofIDs VARCHAR(MAX),
@List varchar(Max) ,
@SearchID int
)
AS
BEGIN
DECLARE
@BegPrefix varchar(5),
@BegSuffix varchar(5),
@BMP decimal(10,3),
@BegTrackName varchar(20),
@BegLat decimal(15,8),
@BegLong decimal(15,8),
@BegEle decimal(15,8),
@EndPrefix varchar(5),
@EndSuffix varchar(5),
@EndMP decimal(10,3),
@EndTrackName varchar(20),
@EndLat decimal(15,8),
@EndLong decimal(15,8),
@EndEle decimal(15,8),
@Direction varchar(16),
@Speed int,
@TrainType varchar(20),
@Description varchar(400),
@InsertDate datetime,
@UpdateDate datetime,
@InsertUser varchar(50),
@UpdateUser varchar(50),
@UID int,
@BegMP decimal(10,3),
@BegTrkName varchar(20),
@EMP decimal(10,3),
@EndTrkName varchar(20),
@BeginMilepost decimal(10,3),
@EndMilepost decimal(10,3),
@BTrackName varchar(20),
@ETrackName varchar(20)
IF OBJECT_ID ('tempdb..#Max_Test') IS NOT NULL
BEGIN
DROP TABLE #Max_Test
END--IF
CREATE TABLE #Max_Test
(
Value varchar(MAX) ,
ID int IDENTITY PRIMARY KEY,
)
INSERT INTO #Max_Test
Select * from Split (@ListofIDs,',' )
select * from #Max_Test
IF OBJECT_ID ('dbo.tbl_Trackname') IS NOT NULL
BEGIN
DROP TABLE tbl_Trackname
END--IF
CREATE TABLE tbl_Trackname
(
TrackNames varchar(MAX) ,
ID int IDENTITY PRIMARY KEY,
)
INSERT INTO tbl_Trackname
Select * from Split (@List,',' )
--select * from #Max_Test
--Select * from #tbl_Trackname
SET @BegPrefix = (SELECT value FROM #Max_Test where id=1)
SET @BegSuffix = (SELECT value FROM #Max_Test where id=2)
SET @BMP = (SELECT value FROM #Max_Test where id=3)
SET @BegTrackName = (SELECT value FROM #Max_Test where id=4)
SET @BegLat = (SELECT value FROM #Max_Test where id=5)
SET @BegLong = (SELECT value FROM #Max_Test where id=6)
SET @BegEle = (SELECT value FROM #Max_Test where id=7)
SET @EndPrefix = (SELECT value FROM #Max_Test where id=8)
SET @EndSuffix = (SELECT value FROM #Max_Test where id=9)
SET @EMP = (SELECT value FROM #Max_Test where id=10)
SET @EndTrackName = (SELECT value FROM #Max_Test where id=11)
SET @EndLat = (SELECT value FROM #Max_Test where id=12)
SET @EndLong = ISNULL((SELECT value FROM #Max_Test where id=13),0)
SET @EndEle = ISNULL((SELECT value FROM #Max_Test where id=14),0)
SET @Direction = (SELECT value FROM #Max_Test where id=15)
SET @Speed = (SELECT value FROM #Max_Test where id=16)
SET @TrainType = (SELECT value FROM #Max_Test where id=17)
SET @Description = (SELECT value FROM #Max_Test where id=18)
SET @InsertUser = (SELECT value FROM #Max_Test where id=19)
SET @UID = (SELECT value FROM #Max_Test where id=20)
--Select * from SSDB_Maximumpermissiblespeed
IF @BegTrackName <> @EndTrackName
BEGIN
INSERT INTO ErrorLog_Asset(
-- Point,
ErrorCode,
ErrorMessage,
MilepostPrefix,
MilePost,
TableName )
SELECT -- B.Point
'15'
,'Begin TrackNames and End TrackNames are not matching'
,@BegPrefix
,@BMP
,'MaximumPermissibleSpeed'
END
IF (Select COUNT(*) from tbl_Trackname)>=1
BEGIN
IF @BegTrackName IS NULL OR @EndTrackName IS NULL OR @BMP IS NULL OR @EMP IS NULL
BEGIN
IF (CURSOR_STATUS('global','C_Max')) >= -1
BEGIN
DEALLOCATE C_Max
END
DECLARE C_Max CURSOR FOR
with cte as (Select Replace(tracknames,'.','#')tracknames from tbl_Trackname)
Select Replace(Parsename(Replace(Parsename(Replace(Tracknames,' to ','.'),2),'_','.'),2),'#','.') 'BegMP',
Replace(Parsename(Replace(Parsename(Replace(Tracknames,' to ','.'),2),'_','.'),1),'#','.') 'BegTrkName',
Replace(Parsename(Replace(Parsename(Replace(Tracknames,' to ','.'),1),'_','.'),2),'#','.') 'EndMP',
Replace(Parsename(Replace(Parsename(Replace(Tracknames,' to ','.'),1),'_','.'),1),'#','.') 'EndTrkName'
From cte
--select * from tbl_trackname
OPEN C_Max
FETCH FROM C_Max INTO @BegMP,@BegtrkName,@EndMP,@EndTrkName
WHILE(@@FETCH_STATUS=0)
BEGIN --- cur beg
Declare C_Max1 Cursor FOR
SELECT Beginmilepost,BeginTrackName,Endmilepost,EndTrackName
FROM SSDB_TrackSegment WHERE BeginMilepost>=@BegMP AND EndMilepost<=@EndMP AND SearchID = @SearchID
Open C_Max1
FETCH FROM C_MAX1 INTO @BeginMilepost,@BTrackName,@EndMilepost,@ETrackName
WHILE(@@FETCH_STATUS=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
@BegPrefix ,
@BegSuffix ,
@BeginMilepost ,
@BTrackName ,
@BegLat,
@BegLong ,
@BegEle ,
@EndPrefix ,
@EndSuffix ,
@EndMilepost ,
@ETrackName ,
@EndLat ,
@EndLong ,
@EndEle ,
@Direction ,
@Speed ,
@TrainType ,
@Description ,
@InsertUser ,
@UID
FETCH FROM C_MAX1 INTO @BeginMilepost,@BTrackName,@EndMilepost,@ETrackName
END----cur end
close C_Max1
Deallocate C_Max1
FETCH FROM C_Max INTO @BegMP,@BegtrkName,@EndMP,@EndTrkName
END----Cur End
CLOSE C_Max
DEALLOCATE C_Max
END
END
ELSE
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
@BegPrefix ,
@BegSuffix ,
@BMP ,
@BegTrackName ,
@BegLat ,
@BegLong ,
@BegEle ,
@EndPrefix ,
@EndSuffix ,
@EMP ,
@EndTrackName ,
ISNULL(@EndLat,0.0) ,
@EndLong ,
@EndEle ,
@Direction ,
@Speed ,
@TrainType ,
@Description ,
@InsertUser ,
@UID
END
END
--EXEC sptalon_MaxSpeedSave 'P,P,null,null,NULL,-74.2144756,-66.45722235,P,P,null,null,-47.2485,-47.258,-78.147896,Increasing,50,Freight,MAxSpeed,SA,14',
--'100_Main1 to 120_Main1',1
I am passing NULL values to BegLat,BMP i am getting error.
Deepa