1
Answer

sql server 2008 Error converting data type nvarchar to datet

Tauseef Kaldane

Tauseef Kaldane

10y
1.4k
1
hello friends...

i have a stored procedure as follows:

Collapse | Copy Code
USE [cheminova] GO /****** Object:  StoredProcedure [dbo].[SP_Firstdistil]    Script Date: 10/30/2014 11:55:31 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:		<Author,,Pragya> -- Create date: <Create Date,,> -- Description:	<Description,,> -- ============================================= ALTER PROCEDURE [dbo].[SP_Firstdistil]  	-- Add the parameters for the stored procedure here     --   @StartDate varchar(50)=Null, 	   --@EndDate varchar(50)=Null 	   @SDate DateTime AS BEGIN 	-- SET NOCOUNT ON added to prevent extra result sets from 	-- interfering with SELECT statements. 	SET NOCOUNT ON;       -- Insert statements for procedure here     declare @StartDate varchar(50)     declare @EndDate varchar(50)     set @EndDate=CONVERT(varchar,DATEPART(month,@SDate))+'/'+CONVERT(varchar,DATEPART(DAY,@SDate))+'/'+CONVERT(varchar,DATEPART(YEAR,@SDate))+' 06:00:00'     set @StartDate=CONVERT(varchar,DATEPART(month,DATEADD(day,-1,@SDate)))+'/'+CONVERT(varchar,DATEPART(DAY,DATEADD(day,-1,@SDate)))+'/'+CONVERT(varchar,DATEPART(YEAR,DATEADD(day,-1,@SDate)))+' 06:00:00' 	Begin 	--table to store data of each tag for a day 	create table #tempval 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		tagname varchar(100),         [timestamp] Varchar(50),         tagval varchar(50),         quality varchar(20) 	) 	create table #tempval1 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		tagname varchar(100),         [timestamp] Varchar(50),         tagval varchar(50),         quality varchar(20) 	) 	create table #tempval2 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		tagname varchar(100),         [timestamp] Varchar(50),         tagval varchar(50),         quality varchar(20) 	) 	create table #tempval3 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		tagname varchar(100),         [timestamp] Varchar(50),         tagval varchar(50),         quality varchar(20) 	) 	--table to store average of each tag for a day 	create table #tagavg 	( 	[ID] [int] IDENTITY(1,1) NOT NULL, 	avgtag float 	) 				create table #temp1 				( 				[ID] [int] IDENTITY(1,1) NOT NULL, 				--[Timestamp] varchar(50), 				[Value][float] NULL 				) 				create table #temp2 				( 				[ID] [int] IDENTITY(1,1) NOT NULL, 				--[Timestamp] varchar(50), 				[Value][float] NULL 				) 				create table #temp3 				( 				[ID] [int] IDENTITY(1,1) NOT NULL, 				--[Timestamp] varchar(50), 				[Value][float] NULL 				) 				create table #temp4 				( 				[ID] [int] IDENTITY(1,1) NOT NULL, 				--[Timestamp] varchar(50), 				[Value][float] NULL 				) 				create table #temp5 				( 				[ID] [int] IDENTITY(1,1) NOT NULL, 				--[Timestamp] Datetime, 				[Value][float] NULL 				) 	create table #tempdigival 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		[timestamp] varchar(30), 		tagval varchar(30) 	) 	 	create table #tempsum 	( 		tagval varchar(30), 		calevent float 	) 	 	create table #tagtemp 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		[timestamp] datetime, 		tagname varchar(200), 		descrip varchar(200), 		unit varchar(10), 		tagval varchar(38), 		calevent float 	) 	create table #totalizervalue 	( 	    [ID] [int] IDENTITY(1,1) NOT NULL, 		tagname varchar(200), 		waqt varchar(30), 		tagval varchar(30) 	) 	create table #FinalResult 		( 		   [ID] [int] IDENTITY(1,1) NOT NULL, 				tag1 float, 				tag2 float, 				tag3 float, 				tag4 float, 				tag5 float, 				tag6 float 		) 	--to store reading 	--select @StartDate as startdate,@EndDate as enddate      DECLARE @SQL as varchar(1000)     Declare @Tagname varchar(300)     Declare @tagVal float     Declare @calval float     declare @avgtag float     declare @X1 float     declare @Y1 float     declare @Z1 float     declare @X2 float     declare @Y2 float     declare @Z2 float     declare @X3 float     declare @Y3 float     declare @Z3 float     declare @X4 float     declare @Y4 float     declare @Z4 float     declare @X5 float     declare @Y5 float     declare @Z5 float     declare @X6 float     declare @Y6 float     declare @Z6 float     declare @X7 float     declare @Y7 float     declare @Z7 float     declare @X8 float     declare @Y8 float     declare @Z8 float     declare @query varchar(500) 	declare @starttime varchar(30) 	declare @endtime varchar(30) 	declare @coltagname varchar(300) 	declare @coltimestamp datetime 	declare @colavg varchar(38) 	declare @prevtime varchar(30) 	declare @currtime varchar(30) 	declare @breakflag int 	declare @firsttimeflag int 	set @firsttimeflag=0 	declare @final float 	declare @initial float 	declare @event float 	Declare @digitalsql varchar(1000) 	set @final=0 	set @initial=0      set @SQL ='SELECT tagname, timestamp , value,Quality FROM OPENQUERY(chemhist,''      set  StartTime = '''''+ @StartDate +''''', EndTime = '''''+ @EndDate +''''', rowcount=0, samplingmode=RawByTime          SELECT tagname, timestamp  ,value,quality FROM ihRawData       WHERE tagname =''''ADMIN-PC.Channel5.Device1.LIC1302'''' '')'      INSERT INTO #tempval1 EXEC(@SQL)      Set @Tagname='ADMIN-PC.Channel5.Device1.LIC1302'         --Select @Tagname as TagName, [timestamp],CAST(tagval as float)as TagValue,         --Cast(tagval as float)*11.08 as CalValue ,quality from         --#tempval1 ORDER BY tagname, [timestamp]         select top 1 @X1= Cast(tagval as float) from #tempval1 order by ID asc         --select @X1 as FirstVal                 select top 1 @Y1=Cast(tagval as Float) from #tempval1 order by ID Desc         --Select @Y1 as SecondVal         set @Z1=(@Y1-@X1)*11.08         Insert into #temp1 values (@Z1)         --SELECT @Z1 as LI1603 from #temp1              set @sql ='SELECT tagname, timestamp , value,Quality FROM OPENQUERY(chemhist,''      set  StartTime = '''''+ @StartDate +''''', EndTime = '''''+ @EndDate +''''', rowcount=0, samplingmode=Calculated          SELECT tagname, timestamp  ,value,quality FROM ihRawData       WHERE tagname =''''ADMIN-PC.Channel5.Device1.LIC1304'''' '')'      INSERT INTO #tempval2 EXEC(@SQL)        /*Select  @Tagname as TagName,[timestamp],CAST(tagval as float)as TagValue,         Cast(tagval as float)*6.02 as CalValue ,quality from      #tempval2 ORDER BY tagname, [timestamp]*/      select top 1 @X2= Cast (tagval as Float) from #tempval2 order by ID asc         select top 1 @Y2=Cast (tagval as Float) from #tempval2 order by ID desc         set @Z2=(@Y2-@X2)*6.02         Insert into #temp2 values (@Z2)         --SELECT @Z2 as LI1604 from #temp2       set @SQL ='SELECT tagname, timestamp , value,Quality FROM OPENQUERY(chemhist,''      set  StartTime = '''''+ @StartDate +''''', EndTime = '''''+ @EndDate +''''', rowcount=0, samplingmode=RawByTime          SELECT tagname, timestamp  ,value,quality FROM ihRawData       WHERE tagname =''''ADMIN-PC.Channel5.Device1.LIC1403'''' '')'      INSERT INTO #tempval3 EXEC(@SQL)      SET @Tagname='ADMIN-PC.Channel5.Device1.LIC1403'         /* Select @Tagname as TagName,[timestamp],CAST(tagval as float)as TagValue,         Cast(tagval as float)*4.80 as CalValue ,quality from         #tempval3 ORDER BY tagname, [timestamp]*/         select top 1 @X3= Cast (tagval as Float) from #tempval3 order by ID asc         --select @X3 as FirstValue         Select top 1 @Y3=Cast (tagval as Float) from #tempval3 order by ID Desc         --select @Y3 as secondvalue         set @Z3=(@Y3-@X3)*4.80         Insert into #temp3 values (@Z3)         --SELECT @Z3 as LI1607 from #temp3                  set @query='select * from openquery(chemhist,''set StartTime="'+@starttime+'",EndTime="'+@endtime+'",SamplingMode=RawByTime,RowCount=0 select timestamp,value from ihrawdata where tagname=ADMIN-PC.Channel5.Device1.P65'')' 		insert into #tempdigival exec(@query) 		select @breakflag= COUNT(*) from #tempdigival where tagval=1 		set @query='select * from openquery(chemhist,''set StartTime="'+@starttime+'",EndTime="'+@endtime+'",SamplingMode=RawByTime,RowCount=0 select tagname,timestamp,value from ihrawdata where tagname=ADMIN-PC.Channel5.Device1.LI1505'')'		 		insert into #totalizervalue exec(@query) 		--take lost time from manual 		if (@breakflag>0)		 		begin 			declare C1 cursor 			for select timestamp from #tempdigival where tagval=1 			open C1 			fetch next from C1 into @currtime 			while @@FETCH_STATUS=0 			begin 				if (@firsttimeflag=0) 				begin 					set @firsttimeflag=1 				select @initial=cast(tagval as float)from #totalizervalue where CONVERT(datetime2,waqt)=CONVERT(datetime2,dateadd(SECOND,10, CONVERT(datetime2,@starttime))) 					select top 1 @final=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)<=CONVERT(datetime2,@currtime) order by waqt desc 					set @final=(@final-@initial)  					set @event=@final * 10 					set @colavg=CONVERT(varchar,@event) 					insert into #tempsum values(@colavg,@final)  					set @prevtime=@currtime 				end 				else 				begin 					select top 1 @initial=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)>=CONVERT(datetime2,@prevtime) 					select top 1 @final=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)<=CONVERT(datetime2,@currtime) order by waqt desc 					set @final=(@final-@initial) 					set @colavg=CONVERT(varchar,@final) 					insert into #tempsum values(@colavg,@final)  					set @prevtime=@currtime 				end 				fetch next from C1 into @currtime 			end 			select top 1 @initial=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)>=CONVERT(datetime2,@prevtime) 			select top 1 @final=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)<=CONVERT(datetime2,@enddate) order by waqt desc 			set @final=(@final-@initial) 			set @event=@final * 10 			set @colavg=CONVERT(varchar,@event) 			insert into #tempsum values(@colavg,@final)  			close C1 			deallocate C1 			select @colavg=SUM(CAST(tagval as float)) from #tempsum 			--truncate table #tempsum 			set @coltagname='ADMIN-PC.Channel5.Device1.LIC1503' 			set @coltimestamp=CONVERT(datetime,@endtime) 			insert into #tagtemp values(@coltimestamp,@coltagname,'PDS slurry Flow Totaliser - 9A','m3',@colavg,@final) 		end 		else 		begin 			select @initial=cast(tagval as float)from #totalizervalue where CONVERT(datetime2,waqt)=CONVERT(datetime2,dateadd(SECOND,10, CONVERT(datetime2,@starttime))) 			select top 1 @final=cast(tagval as float) from #totalizervalue where CONVERT(datetime2,waqt)<=CONVERT(datetime2,@enddate) order by waqt desc	 			set @final=(@final-@initial) 			set @event=@final * 10 			set @colavg=CONVERT(varchar,@event) 			set @coltagname='ADMIN-PC.Channel5.Device1.LI1505' 			set @coltimestamp=CONVERT(datetime,@endtime) 			insert into #tagtemp values(@coltimestamp,@coltagname,'PDS slurry Flow Totaliser - 9A','m3',@colavg,@final) 		end         --SELECT @Z4 as LI1608 from #temp4             set @SQL ='SELECT tagname, timestamp , value,Quality FROM OPENQUERY(chemhist,''      set  StartTime = '''''+ @StartDate +''''', EndTime = '''''+ @EndDate +''''', rowcount=0, samplingmode=RawByTime          SELECT tagname, timestamp  ,value,quality FROM ihRawData       WHERE tagname =''''ADMIN-PC.Channel5.Device1.FIQ1302'''' '')'      INSERT INTO #tempval EXEC(@SQL)      --SET @Tagname='ADMIN-PC.Chem.Device1.LI1609'      --   Select @Tagname,[timestamp],CAST(tagval as float)as TagValue,      --   Cast(tagval as float)*73.30 as CalValue ,quality from      --#tempval ORDER BY tagname, [timestamp]      --select @calval=Cast (tagval as Float)*73.30 from #tempval      --   Insert into #tagtemp values (@calval,@tagVal)         select top 1 @X5= Cast (tagval as Float) from #tempval order by ID asc         --select @X5 as FirstValue         Select top 1 @Y5=Cast (tagval as Float) from #tempval order by ID Desc         --select @Y5 as secondvalue         set @Z5=(@Y5-@X5)*73.30         Insert into #temp5 values (@Z5)         --SELECT @Z5 as LI1609 from #temp5      END      set @avgtag=cast((isnull(@Z1,0)+isnull(@Z2,0)+isnull(@Z3,0)+isnull(@Z4,0)) as float)/cast((nullif((@Z5),0)) as float)      insert into #tagavg values (@avgtag)      --select * from #tagavg      --inner join on table      Begin      insert into #finalResult select isnull(t1.Value,0) as  R_21LT,isnull(t2.Value,0) as  R_22LT,isnull(t3.Value,0) as R_24LT, isnull(t4.calevent,0) as B_22LT,isnull(t5.Value,0) as DETA_FIQ ,isnull(t6.avgtag,0) as avgtag from #temp1 as t1      Inner join #temp2 as t2      on t2.ID=t1.ID      Inner join #temp3 as t3      on t3.ID=t2.ID      Inner join #tagtemp as t4      on t4.ID=t3.ID      inner join #temp5 as t5      on t5.ID=t4.ID      inner join #tagavg as t6      on t6.ID=t5.ID      select tag1,tag2,tag3,tag4,tag5,tag6 from #FinalResult      End       END

and i have another stored procedure as follows

Collapse | Copy Code
USE [cheminova] GO /****** Object:  StoredProcedure [dbo].[SP_FinalYieldtemp]    Script Date: 10/30/2014 10:22:51 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:		<Author,,Name> -- Create date: <Create Date,,> -- Description:	<Description,,> -- ============================================= ALTER PROCEDURE [dbo].[SP_FinalYieldtemp]  	-- Add the parameters for the stored procedure here 	@sdate datetime 	 AS BEGIN 	-- SET NOCOUNT ON added to prevent extra result sets from 	-- interfering with SELECT statements. 	SET NOCOUNT ON; 	--SET @sdate=convert(varchar (10),@sdate,103) declare @sql as varchar(1000) Begin 		create table #Temp1 		( 		   [ID] [int] IDENTITY(1,1) NOT NULL, 				tag1 float, 				tag2 float, 				tag3 float, 				tag4 float, 				tag5 float, 				tag6 float 		) END     -- Insert statements for procedure here 	SET @SQL ='SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=ADMIN-PC;Trusted_Connection=yes;'', ''SET FMTONLY OFF; EXEC [cheminova].[dbo].[SP_Firstdistil] "'+convert(varchar(20),@sdate,103)+'" '')' --select @SQL EXEC (@SQL) --INSERT into  #Temp1 EXEC (@SQL) END

and i execute SP_FinalYieldtemp as follows:

Collapse | Copy Code
exec SP_FinalYieldtemp '2014-10-29'

but i m getting following error

Msg 8114, Level 16, State 5, Procedure SP_Firstdistil, Line 0
Error converting data type nvarchar to datetime.

what i have done here is, i have called SP_Firstdistil procedure with parameter @sdate in SP_FinalYieldtemp in stored procedure.

when i executed SP_Firstdistil procedure, it gave me proper output.
i m very confused in SET @SQL statement in SP_FinalYieldtemp procedure.
plz help to resolve it
Answers (1)