2014-10-27 233 views
0

我编写一个名为SP_FirstDistil的存储过程,现在要在具有相同datetime参数的SP_YieldFinal存储过程中调用它。请帮我解决这个问题。 SP_FirstDistil as-如何使用datetime参数调用存储过程中的存储过程

USE [cheminova] 
GO 
/****** Object: StoredProcedure [dbo].[SP_Firstdistil] Script Date: 10/27/2014 12:54:52 ******/ 
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, 
     [email protected] 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 varchar(100) 
    ) 
       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) 
    ) 
    --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 varchar(100) 
    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=(@[email protected])*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=(@[email protected])*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=(@[email protected])*4.80 
     Insert into #temp3 values (@Z3) 
     --SELECT @Z3 as LI1607 from #temp3 

     set @query='select * from openquery(chemhist,''set StartTime="'[email protected]+'",EndTime="'[email protected]+'",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="'[email protected]+'",EndTime="'[email protected]+'",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=(@[email protected]) 
        set @[email protected] * 10 
        set @colavg=CONVERT(varchar,@event) 
        insert into #tempsum values(@colavg,@final) 
        set @[email protected] 
       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=(@[email protected]) 
        set @colavg=CONVERT(varchar,@final) 
        insert into #tempsum values(@colavg,@final) 
        set @[email protected] 
       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=(@[email protected]) 
      set @[email protected] * 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=(@[email protected]) 
      set @[email protected] * 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=(@[email protected])*73.30 
     Insert into #temp5 values (@Z5) 
     --SELECT @Z5 as LI1609 from #temp5 
    END 
    set @avgtag=(@[email protected][email protected][email protected])/nullif((@Z5),0) 
    insert into #tagavg values (@avgtag) 
    --inner join on table 
    Begin 
    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 
    End 

END 

请帮忙。

+0

报价从http://stackoverflow.com/help/how-to-ask:**不只是复制你的整个程序**。请学习如何隔离* one * point和post * concise *代​​码与那个* one *点相关。此外,请参阅:http://stackoverflow.com/help/mcve – MatBailie 2014-10-27 07:45:06

回答

0

如果你想打电话SP_FirstDistilSP_YieldFinal,然后在SP_YieldFinal你应该使用:

exec dbo.SP_FirstDistil @SDate 
+0

我试过这段代码,但它没有正常工作,并引发以下错误 - 消息8164,级别16,状态1,过程SP_Firstdistil,行174 INSERT EXEC语句不能嵌套。 – 2014-10-27 08:22:40

+0

然后,您应该将'SP_FirstDistil'更改为将返回表的函数。 – SmartDev 2014-10-27 08:26:50