Tuesday 30 September 2014

Conversion failed when converting date and/or time from character string.

Here i have to use Procedure that contain different type of variable have different datatype and i have to specify insert command in single quotes(as a string) and execute insert command using this
 EXEC  sp_executesql @SQLString command inside sp_GpsdataInsert procedure .
Now i have to execute this procedure then i have to get this error
Conversion failed when converting date and/or time from character string.

Incorrect Procedure:


create proc sp_GpsdataInsert
@dataindication tinyint,
@vichelId varchar(15),
@Datatime datetime,
@lat varchar(15),
@lang varchar(15),
@speed decimal(5,2),
@direction decimal(6,3),
@odometer decimal(9,2),
@Ignition bit,
@digitalInputOne bit,
@digitalInputTwo bit,
@Immobilizer bit,
@GPSValidityStatus char(1)
as begin
DECLARE @SQLString NVARCHAR(MAX) 
SET @SQLString = 'insert into Tab_'+convert(varchar,getdate(),112) +'([date],dataindication,vichelId,Datatime,lat,lang,speed
,direction,odometer,Ignition,digitalInputOne,digitalInputTwo,Immobilizer,GPSValidityStatus) values('''+GETDATE()+''','+@dataindication+','+
@vichelId+','+convert(varchar, @Datatime, 109)+','+@lat+','+@lang+','+@speed+','+@direction+','+@odometer+','+@Ignition+','+@digitalInputOne+','+@digitalInputTwo+','+@Immobilizer+','+
@GPSValidityStatus
+')'

EXEC sp_executesql @SQLString
 end

Correct Procedure:

Cast each parameter of procedure as varchar because sp_executesql  command operate only string data.

SET @SQLString = 'insert into Tab_'+convert(varchar,getdate(),112) +'([date],dataindication,vichelId,Datatime,lat,lang,speed
,direction,odometer,Ignition,digitalInputOne,digitalInputTwo,Immobilizer,GPSValidityStatus) values
('''+cast(GETDATE() as varchar)+''','+cast(@dataindication as varchar)+','+
@vichelId+','''+cast(@Datatime as varchar)
+''','+@lat+','+@lang+','+cast(@speed as varchar)+','+cast(@direction as varchar)+','
+cast(@odometer as varchar)+','+cast(@Ignition as varchar)+','+cast(@digitalInputOne as varchar)
+','+cast(@digitalInputTwo as varchar)+','+cast(@Immobilizer as varchar)+','+
cast(@GPSValidityStatus as varchar)

+')'

No comments:

Post a Comment